Portscanner



  • Hallo zusammen. Ich habe mal einen ganz einfachen Portscanner geschrieben:

    #include <iostream.h>
    #include <stdio.h>
    #include <errno.h>
    #include <string>
    #include <sys/socket.h>
    #include <sys/types.h>
    #include <netinet/in.h>
    #include <arpa/inet.h>
    #include <netdb.h>
    #include <unistd.h>
    
    using namespace std;
    
    int main(int argc, char * argv[])
    {
    struct hostent *he;
    if ((he=gethostbyname(argv[1])) == NULL)exit(1);
    for(int port=0; port<=65000; port++)
    {
    int sockfd = socket(AF_INET, SOCK_STREAM, 0);
    if(sockfd == -1) perror("socket()");
    struct sockaddr_in serv_addr;
    serv_addr.sin_family = AF_INET;
    serv_addr.sin_port = htons(port);
    serv_addr.sin_addr = *((struct in_addr *)he->h_addr);
    
    if (connect(sockfd, (sockaddr*) &serv_addr, sizeof(sockaddr)) == -1) close(sockfd);
    else 
    {
    cout<<"Port open: "<<port<<"\n";
    close(sockfd);
    }
    }
    }
    

    Wenn ich meine Firewall aus habe kann ich meine Ports scannen.
    Doch wenn ich sie an mache, wird nichts ausgegeben.
    Woran liegt das?
    Eig müsste er doch einfach mit keinem Port connecten können und somit das programm wieder beenden. Das tut er aber nich.
    Wie kann ich das beheben?



  • Warte mal einfach etwas länger.



  • Habe es eine halbe stunde lang laufen lassen.
    Tut sich nichts.



  • Firewalls sind nicht dumm... Es gibt eigendlich keinen legalen Grund dafür das jemand deine Ports scanned von Außerhalb. Ein Portscanner wird daher in der regel als Angreifer klassifiziert.

    Um diesem Angreifer so wenig wie möglich Anhaltspunkte zu geben wird daher der connect-versuch auf den Port nicht geblocked sondern einfach ignoriert. Fazit: dein Scanner bleibt in ewigen Timeout hängen und die Chance, das er die wenigen offenen Ports findet wird minimiert.



  • ps: Man hats halt heutzutage nicht mehr leicht als script kiddie wenn man coole Portscanner bauen will, da muss man sich mehr einfallen lassen 😉 (Oder warum sonst solltest Du versuch bei eingeschalteter Firewall nach ports zu scannen 😉 )



  • warte einfach noch länger



  • Ich bin sicher kein Scriptkiddy, sonst würde ich mir einfach einen Portscanner runterladen.



  • ok, advanced skript kiddie... Als programmierer würdest Du auf die Idee kommen mal in die Dokumentation z.B. deiner firewall zu schauen. oder die doku die beschriebt wie connect funktioniert... oder was ein timeout ist.

    skript-kiddie = skripte (oder sourcecodes) verwenden ohne wirklich zu wissen wie sie funktionieren 😉


Anmelden zum Antworten