2017-05-28 4 views
1

Ich mache einen Port-Scanner, der prüft, ob Ports offen oder geschlossen sind, aber ich bin überzeugt, dass es nicht funktioniert, da es jeden Port als geschlossen auflistet, sogar Ports, die ich speziell geöffnet habe, nur um zu überprüfen, ob es funktioniert. Kann jemand etwas mit meinem Code falsch sehen?Wie kann ich feststellen, ob mein Port Scanner funktioniert?

if userChoice == "1": 
    # code for option 1 
    print("You selected Port Scan Tool") 
    loop = 0 
    subprocess.call('cls', shell=True) 
    remoteServer = input("Enter a remote host to scan: ") 
    start=input("Enter starting port number: ") 
    start = int(start) 
    end=input("Enter ending port number: ") 
    end = int(end) 
    remoteServerIP = socket.gethostbyname(remoteServer) 

    # Print a nice banner with information on which host we are about to scan 
    print ("-" * 60) 
    print("Please wait, scanning remote host", remoteServerIP) 
    print("-" * 60) 

    # Check what time the scan started 
    t1 = datetime.now() 
    timestr = time.strftime("%d.%m.%Y-%H.%M.%S")# creates time stamp on text file 

    try: 
     textFileLocation = timestr + " - Port Scan Results.txt"# creates and names text file 
     for port in range(start, end): # lets user select range 
      sock = (socket.socket(socket.AF_INET, socket.SOCK_STREAM)) 
      result = sock.connect_ex((remoteServerIP, port)) 
      if result == 0: 
       print("Port {}: \t Open".format(port)) 
       #print("Port {}: \t Closed".format(port)) 
       #print("Port {} \t Closed".format(port)) 
       textFileLocation = timestr + " - Port Scan Results.txt" 
       textFile = open(textFileLocation, "a") 
       textToWrite = "Open: Port %d\n" % port 
       textFile.write(textToWrite) 
       textFile.close() 
      else: 
       print("Port {}: \t Closed".format(port)) 
       textFileLocation = timestr + " - Port Scan Results.txt" 
       textFile = open(textFileLocation, "a") 
       textToWrite = "Closed: Port %d\n" % port 
       textFile.write(textToWrite) 
       textFile.close() 
      sock.close() 
+0

Haben Sie die Socket-Funktion getestet, bevor Sie sie in eine Schleife setzen? Außerdem solltest du die Ausgabedatei wirklich vor der Schleife öffnen –

+0

@ cricket_007 Es ist nicht nur open() an der falschen Stelle. Dieser Code ist, ich weiß nicht, was es ist. Schockierend buggy oder ein ähnlicher Ausdruck würde ich denken. – Dalen

Antwort

2

Dies prüft nur, ob irgendein Programm diesen Port überwacht.

Um zu sehen, ob dies funktioniert oder nicht, entfernen Sie zuerst try Block, um zu sehen, welcher Fehler zurückgegeben wird. Verwenden Sie dann den korrekten Fehler in der Ausnahmebehandlung, d. H. Wenn Ihr Computer nicht im Netzwerk ist, wird der Versuch fehlschlagen und es kann keine Verbindung hergestellt werden. Auch müssen Sie Timeouts einführen, so dass der Socket nicht hängen bleibt und versucht, eine Verbindung herzustellen.

Um zu sehen, ob Ihr Code etwas mit dem Zielcomputer macht, aktivieren Sie die Firewall dort und richten Sie sie ein, um Sie zu benachrichtigen, wenn jemand genau das tut, was Sie getan haben. Ihr Code schlägt möglicherweise auch fehl, wenn Ihr Router/Switch den Port-Scan in Ihrem Netzwerk verhindert. Sie sollten auch seine Firewall-Einstellungen überprüfen.

Sie vermissen auch die Ausnahme Block in Ihrem Code, und versuchen Sie, ist an der falschen Stelle sowieso. Sie haben jede Verbindung testen:

for x in range(...): 
    try: 
     s = socket.socket(...) 
     s.connect(...) 
     s.close() 
    except: pass 

Auch wenn Sie zum Beispiel verwenden soll:

except socket.SocketError as error: 

und dann prüfen, für Fehlernummer usw. in variable Fehlern wo Ausnahme gespeichert werden.

Oh, BTW, socket.socket.connect() gibt None zurück, so dass Ihre Prüfung immer False wäre. Dies ist nicht C, sein Python.

Try-except wird Ihnen sagen, ob die Verbindung bestanden oder mit vielen weiteren Informationen fehlgeschlagen ist.

+0

Gute Antwort, obwohl das eigentliche Problem ist, "so wäre Ihre Prüfung immer falsch." –

Verwandte Themen