tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
8
ZUGRIFFE
609
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Avatar von SaTaN
    SaTaN SaTaN ist offline Mitglied Gold
    Registriert seit
    Aug 2002
    Ort
    Hamburg (D)
    Beiträge
    163
    Hallo ihr da draussen,

    ich code gerade ein Portscanner aus Neugier.
    In meinem Intranet funktioniert er sehr gut.
    Das Problem ist wenn ich einen anderen scanne ins Internet rein
    dauert das sehr sehr sehr lange.
    Keine Angst ich scanne ein Freund der weis bescheid.
    Nicht das Ihr mich jetzt hier zur Schnecke macht.

    Es gibt 65535 Ports die ich gerne durchscannen würde.

    Habe da verschiedene varianten getestet.

    Hier erstmal mein code :
    1.Variante
    dauert im Intranet ca. 14,5 sec
    im Internet unendlich
    PHP-Code:
    $ip "192.168.0.2";
      for(
    $i=1$i <= 65535$i++) {
    $port = array($i);
    for (
    $k=0$k<count($port); $k++) {
         
    $ports $port[$k];
    $giu fsockopen($ip$ports, &$errno, &$errstr1);
     if(!
    $giu) {
        
    //echo "Port ", $ports, " geschlossen<br>\n";
       
    } else {
        echo 
    "Port "$ports" offen<br>\n";
    fclose($giu);
        } 
    //if !$giu
      
    //for schleife $k
    //for schleife $i 
    2.Variante
    Die leider nicht funktioniert.
    Über ein 2 Dimensionales array()

    PHP-Code:
    $ip "192.168.0.2";

    // Das array ist aus platzgründen gekürzt
    $port = array( 
         
    "0" => array(1,2,3,4,....,1024), 
         
    "1" => array(1025,....,2048), 
         
    "2" => array(2049,....,3072), 
      .... 
      .... 
         
    "63" => array(64511,....,65535));

    for (
    $k=0$k<count($port); $k++) {
         
    $ports $port[$k];
    $giu fsockopen($ip$ports, &$errno, &$errstr1);
     if(!
    $giu) {
        
    //echo "Port ", $ports, " geschlossen<br>\n";
       
    } else {
        echo 
    "Port "$ports" offen<br>\n";
    fclose($giu);
        } 
    //if !$giu
      
    //for schleife $k 
    3. Variante die leider auch bei mir nicht funktioniert
    Über ein einfaches array

    PHP-Code:
    $ip "192.168.0.2";

    // Das array ist aus platzgründen gekürzt
    $port = array(0,1,2,3,4,....,65535), 

    for (
    $k=0$k<count($port); $k++) {
         
    $ports $port[$k];
    $giu fsockopen($ip$ports, &$errno, &$errstr1);
     if(!
    $giu) {
        
    //echo "Port ", $ports, " geschlossen<br>\n";
       
    } else {
        echo 
    "Port "$ports" offen<br>\n";
    fclose($giu);
        } 
    //if !$giu
      
    //for schleife $k 
    Könnte mir jemand da weiter helfen?
    Besteht die Möglichkeit die 1. Variante etwas zu tunen, also zu optimieren ?
    Warum funktioniert es nicht mit 2. und 3. Variante ?
    Schafft das array nicht soviele Zahlen aufzunehmen ?


    Als Bonus würde ich gerne wissen gibt es in PHP eine Möglichkeit herauszufinden welcher Dienst hinter dem Port steckt ?
    Um dann so eine Ausgabe zu machen :

    Port 80 offen http / Webserver


    Vielen Dank

    euer SaTaN
     
    -- Erfahrung braucht man fürs Leben --
    Weltweite Studie
    http://extreme-abuse-survey.net

    http://d-tommasi.de

  2. #2
    Avatar von SonicBe@m
    SonicBe@m SonicBe@m ist offline Mitglied Brokat
    Registriert seit
    Jan 2002
    Ort
    München
    Beiträge
    447
    Lösung überleg ich mir noch.. *g*
    aber ist dir klar warum es im Intranet so gut Funktioniert ?
    wenn du alle Ports durchscannen willst brauchste locker für die 2te variante min ne Stunde.

    Warum?
    du machst Verbindungen auf und zwar genau 65536
    So nun zum eigentlichen Punkt. Du hast keine 100 MBIT Leitung die die so schnell soviele Verbindungen zu den Servern aufstellen kann.
    Anfrage - Antwort;
    im Intranet ist es klar dort brauchst du nicht ewig bis du ne Antwort bekommst.
    In Php kannste ausserdem keinen richtigen Timeout handeln und ausserdem hast du keine Prozesse sonder nur einen Prozess.

    Du machst Schleifen
    Also frägst du den Server an.
    Er wartet sagen wir 4 Sekunden und genau sollange wartet dein Script bei diesem Server.
    Also hast du genau 65536 einzelne Serveranfragen die er nacheinander abarbeitet.
    Hättest du Java,C/C++ genommen könntest du Treaths benutzen dann könntest du ob wohl noch eine Abfrage stattfindet weitere Anfragen stellen ohne das es dein Programm beinflussen würde...

    Scanner über Php kannste vergessen ausser du hast halt die Lust zu warten gg

    Ich hoffe ich hab dich nun zum überlegen angeregt, ob du den auch wirklich schreiben willst :O
    Geändert von SonicBe@m (16.09.03 um 12:25 Uhr)
     
    Moep :)

  3. #3
    Avatar von SaTaN
    SaTaN SaTaN ist offline Mitglied Gold
    Registriert seit
    Aug 2002
    Ort
    Hamburg (D)
    Beiträge
    163
    Hallo SonicBe@m,

    vielen Dank für deine rasche Antwort.
    Ja das mit dem Internet wo du das gerade sagst ist mir das klar.

    Für eine Lösung zur Optimierung wäre ich dir da auch sehr dankbar.
    Ich hoffe du meinst das ernst.

    Na ja die Erklärung von dir dazu ist sehr verständlich.

    Nur würde ich das gerne weiter machen da ich schon viel Zeit investiert habe.
    Das Thema finde ich auch dazu sehr interessant.
    Zur Not muss man halt stundenlang warten.

    Vielen Dank für Hilfe


    euer SaTaN
     
    -- Erfahrung braucht man fürs Leben --
    Weltweite Studie
    http://extreme-abuse-survey.net

    http://d-tommasi.de

  4. #4
    Avatar von SonicBe@m
    SonicBe@m SonicBe@m ist offline Mitglied Brokat
    Registriert seit
    Jan 2002
    Ort
    München
    Beiträge
    447
    Also ich hab mal in Google geschaut und wurde fündig!
    evt hilft dir das ja weiter..
    http://px.sklar.com/code.html?id=391
     
    Moep :)

  5. #5
    Avatar von SaTaN
    SaTaN SaTaN ist offline Mitglied Gold
    Registriert seit
    Aug 2002
    Ort
    Hamburg (D)
    Beiträge
    163
    Hey SonicBe@m,

    GOOGLE IST AUCH MEIN BESTER FREUND

    Das Script kenne ich.
    Damit habe ich mich schon gestern angefreundet und ich bekamm immer fehlers.

    Kann mit denn nichts anfangen.

    Fatal error: Cannot use [] for reading in

    Vielleicht kannst du mir was dazu sagen.
    PHP-Code:
    //gleich nach MAIN
    $CONN_PORT[]; 
    $OPEN_PORTS[]; 

    // gleich zu anfang in der Definition
    $PORTSNUMBER[]; 
    $PORTSDESCRIPTION[]; 
    Vielen Dank

    euer SaTaN
     
    -- Erfahrung braucht man fürs Leben --
    Weltweite Studie
    http://extreme-abuse-survey.net

    http://d-tommasi.de

  6. #6
    Avatar von SonicBe@m
    SonicBe@m SonicBe@m ist offline Mitglied Brokat
    Registriert seit
    Jan 2002
    Ort
    München
    Beiträge
    447
    was auch immer
    dann deklariere Sie richtig
    PHP-Code:
    //gleich nach MAIN
    $CONN_PORT = array(); 
    $OPEN_PORTS = array(); 

    // gleich zu anfang in der Definition
    $PORTSNUMBER = array(); 
    $PORTSDESCRIPTION = array(); 
     
    Moep :)

  7. #7
    Registriert seit
    Dec 2001
    Ort
    Hannover
    Beiträge
    4.234
    Vorschlag zur Güte:

    Mit eigenem Server auf z. B. Linux kannst Du einen Portscanner nehmen und das Ergebnis von PHP übernehmen lassen.

    Das heißt im konkreten Fall das Programm arbeitet bestenfalls mit üblichen multiplen Threads unter Linux und scannt wesentlich schneller, da simultan mehrere Ports abgefragt werden.

    Bei allen Ports kann das je nach Leitung immer noch ein paar minuten dauern, weshalb PHP dann dementsprechend ein höheres script-timeout bräuchte.

    Greetz,
    Neuro
     
    Copy for free - Yet another page for free software with soures:
    • BitUnlocker (Automatic unlock multiple Bitlocker secured drives - if you use the same password)
    • W7 ScrollZoom (Use Windows 7 zoom tool through your mouse wheel)
    • AppStarter (Somewhat like PortableApps launcher)
    • QuakeConsole (Show/Hide windows console with your tilde key)
    • BetterFileRenamer (Simple file renamer that adds date and version)
    .... more to come

  8. #8
    Avatar von SaTaN
    SaTaN SaTaN ist offline Mitglied Gold
    Registriert seit
    Aug 2002
    Ort
    Hamburg (D)
    Beiträge
    163
    Hallo Neuro

    Hmm, soll ich das jetzt so verstehen das ich den Portscanner der unter Linux läuft
    unter PHP starten kann und das Ergebnis auswerten könnte in PHP ?

    Unter Linux starte ich den Portscanner so :
    nmap -sS -p80 -O <host, oder ip>

    Wenn ich das so richtig verstanden habe könntest du mir irgendwie ein
    ansatz Posten, oder du meldest dich bitte bei mir über ICQ.

    Dann schnacken wir eine Runde

    Vielen Dank

    euer SaTaN
     
    -- Erfahrung braucht man fürs Leben --
    Weltweite Studie
    http://extreme-abuse-survey.net

    http://d-tommasi.de

  9. #9
    Registriert seit
    Dec 2001
    Ort
    Hannover
    Beiträge
    4.234
    Auch hier bietet uns PHP eine schöne Funktion

    http://de3.php.net/manual/de/function.passthru.php
     
    Copy for free - Yet another page for free software with soures:
    • BitUnlocker (Automatic unlock multiple Bitlocker secured drives - if you use the same password)
    • W7 ScrollZoom (Use Windows 7 zoom tool through your mouse wheel)
    • AppStarter (Somewhat like PortableApps launcher)
    • QuakeConsole (Show/Hide windows console with your tilde key)
    • BetterFileRenamer (Simple file renamer that adds date and version)
    .... more to come

Ähnliche Themen

  1. C++ - Portscanner
    Von paul10 im Forum C/C++
    Antworten: 9
    Letzter Beitrag: 02.05.09, 11:20
  2. Kleines Problemchen mit dem Array
    Von igfas im Forum PHP
    Antworten: 5
    Letzter Beitrag: 13.07.06, 09:22
  3. Portscanner
    Von Cypher_ab im Forum C/C++
    Antworten: 4
    Letzter Beitrag: 27.02.04, 10:02
  4. checkboxen array problemchen
    Von slapper im Forum PHP
    Antworten: 3
    Letzter Beitrag: 19.12.03, 09:10
  5. portscanner in php
    Von EMinus im Forum PHP
    Antworten: 2
    Letzter Beitrag: 21.10.02, 16:27