portscanner funktioniert nicht



  • Hi Leute
    ich hab ein bischen in Google nach quellcodes für portscanner gesuchtund auch was gefunden:

    /*--------------------
    | if your using dev-c++
    | you need to link
    | -lws2_32
    | to your application
    ---------------------*/
    
    #include <winsock2.h>
    #include <iostream>
    using namespace std;
    
    char IP[20];
    int start, end, temp, err, nret;
    SOCKET sock;
    SOCKADDR_IN Info;
    WSADATA wsadata;
    
    int main()
    {
       err = WSAStartup(MAKEWORD(2, 2), &wsadata);
       if(err != 0)
       {
          cout << "Error with winsock. Will Now Exit." << endl;
          cin.get();
          return 0;
       }
    
       cout << "Target IP: ";
       cin>>IP;
       cout << "Starting Port: ";
       cin>>start;
       cout << "End Port: ";
       cin>>end;
    
       cin.ignore();
    
       cout << endl << endl << "Starting Scan..." << endl << endl;
    
       temp = start;
       while(temp < end)
       {
          sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
    
          Info.sin_family = AF_INET;
          Info.sin_port = htons(start);
          nret = connect(sock, NULL, NULL);
          if(nret != SOCKET_ERROR)
          {
             cout << "Port " << temp << " - OPEN! " << endl;
          }
          temp++;
          closesocket(sock);
        }
        cout << endl << "Finished With Scan..." << endl;
    
        cin.get();
        return 0;
    }
    

    (http://www.rohitab.com/discuss/lofiversion/index.php/t26652.html)
    bei mir gehts auch ohne lws2_32 zu linken...
    naja auf jeden fall hab ich denn code dan compiliert und ausgeführt... ich hab aber keine offenen Ports gefunden! obwohl ich wenn ich mit einem fertigen portscanner (Local port scanner) mehrere offene Ports finde...
    Eingaben hab ich folgende gemacht
    Target IP: 127.000.000.001
    Starting Port: 0
    End Port: 1000

    Liegt das an dem Programm oder an was?



  • Dein Aufruf der connect-Funktion ist totale Grütze. Du musst neben dem Socket der Funktion auch noch die Adresse deiner Structur, hier "Info", und dessen größe übergeben. Also muss das wie folgt aussehen

    nret = connect(sock, (struct sockaddr *) &Info, sizeof(Info));
    

    Dann klappt das auch mit dem Nachbarn 😉 Außerdem wird deine if-Abfrage

    if(nret != SOCKET_ERROR)
    

    nicht richtig ausgewertet. Wenn du statt "SOCKET_ERROR" "0" setzt läuft das ganze glatt.

    EDIT:

    Target IP: 127.000.000.001

    Zudem weiß ich nicht, ob das wirklich gleichwertig mit 127.0.0.1 interpretiert wird. Ich bin was die Binärdarstellung da gerade nicht so fit. Also eher letzteres verwenden.



  • Die Ziel-Adresse sollte noch verwendet werden:

    Info.sin_addr.s_addr = inet_addr(IP);
    

    weiterhin wird immer der gleiche Port geprüft:

    Info.sin_port = htons(start); // hier sollte temp statt start stehen
    

    die while-Schleife könnte den letzten Port mit überprüfen:

    while(temp <= end)
    {
    ...
    }
    

    und ein WSACleanup am Ende wäre auch nicht schlecht.



  • Berufspenner schrieb:

    Ich bin was die Binärdarstellung da gerade nicht so fit. Also eher letzteres verwenden.

    Dir ist schon klar, dass das eine IP-Adresse ist?



  • lol^^ schrieb:

    Berufspenner schrieb:

    Ich bin was die Binärdarstellung da gerade nicht so fit. Also eher letzteres verwenden.

    Dir ist schon klar, dass das eine IP-Adresse ist?

    Ich weiß gerade nicht, was du meinst. Erklärs mir bitte.



  • der Berufspenner hat damit gemeint das er nich weis ober die IP in dem format 127.000.000.001 übergeben wird , auch als 172.0.0.1 interpretiert wird... der weis ganz sicher was ne IP is



  • ...hat aber nix mit Binärdarstellung zu tun, da gibt es die Ziffern 2 und 7 nicht :p

    Ein sehr ungeschickter IP-Adressen-Parser könnte die führende Null zum Anlass nehmen, die Zahlen oktal zu interpretieren, aber selbst das macht bei den Werten 0 und 1 keinen Unterschied.



  • BorisDieKlinge schrieb:

    der Berufspenner hat damit gemeint das er nich weis ober die IP in dem format 127.000.000.001 übergeben wird , auch als 172.0.0.1 interpretiert wird... der weis ganz sicher was ne IP is

    So siehts aus 😉 Danke, dass du das nocheinmal verdeutlicht hast 🙂

    LordJaxom schrieb:

    ...hat aber nix mit Binärdarstellung zu tun, da gibt es die Ziffern 2 und 7 nicht :p

    Hä? Wieso sollte es die Ziffern 2 und 7 in binärer Form nicht geben? Und ob das ganze was mit Binärzahlen zu tun hat. Intern werden die IP-Adressen als "gepunktete Dezimalzahlen" bzw. als Zeichenketten gehandhabt. Damit der Rechner damit überhaupt ordentlich arbeiten kann, wird diese Zeichenkette mit hilfe der Funktion

    inet_addr()
    

    in eine passende Binärform umgewandelt.



  • Berufspenner schrieb:

    LordJaxom schrieb:

    ...hat aber nix mit Binärdarstellung zu tun, da gibt es die Ziffern 2 und 7 nicht :p

    Hä? Wieso sollte es die Ziffern 2 und 7 in binärer Form nicht geben?

    Weil die binäre Darstellung nur die Ziffern 0 und 1 kennt. Die Zahlen 2 und 7 gibt es natürlich in binärer Darstellung. </haarespalt>

    Und ob das ganze was mit Binärzahlen zu tun hat. Intern werden die IP-Adressen als "gepunktete Dezimalzahlen" bzw. als Zeichenketten gehandhabt.
    Damit der Rechner damit überhaupt ordentlich arbeiten kann, wird diese Zeichenkette mit hilfe der Funktion

    inet_addr()
    

    in eine passende Binärform umgewandelt.

    Das sagt aber nun garnichts darüber aus, was es mit der Binärdarstellung zu tun hat, ob "127.000.000.001" und "127.0.0.1" unterschiedlich interpretiert werden.



  • lol laut dem ding sind bei mir alles ports offen xD



  • Moin.
    000 und 0 sind in binärdarstellung definitv das selbe.
    Es ist wohl eher die Frage gestellt ob inet_addr() das richtig convertiert.
    Meines wissens ja.

    Die Zahlen 2 und 7 gibt es nicht in der binärdarstellung. Dessen Wertigkeit ausm Decimalsystem aber schon. Schauste hier.

    grüüße



  • OK super jetzt funktionierts

    @lollol
    'lol laut dem ding sind bei mir alles ports offen xD'

    man muss noch folgende if schleife ändern:

    if(nret == 0)   // zuvor war hier !=
          {
             cout << "Port " << temp << " - OPEN! " << endl;
          }
    

Anmelden zum Antworten