2016-08-31 3 views
-1

Unten ist ein Beispiel für Code, den ich geschrieben habe, der den iterativen Teil eines Portscanners bildet, den ich in Python schreibe.Neu bei der Programmierung, hilf mir Port-Scans zu verstehen

sock = socket(AF_INET, SOCK_STREAM) 
open_ports_list = [] 

for i in range(port_min, port_max + 1): 
    ipaddress_tup = (ipaddress, i) 
    status = sock.connect_ex(ipaddress_tup) 

    #executed if connect_ex(ipaddress_tup) is successful 
    if status == 0: 
     print('Port',i, 'is OPEN') 
     open_ports_list.append(i) 

    #executed if connect_ex(ipaddress_tup) is unsuccessful 
    else: 
     print('Port',i,'is CLOSED') 

Das gescannte System verfügt über Ports 135 und 136 OPEN, aber wenn ich den obigen Code ausführen, heißt es, dass der Port 135 offen ist und Port 136 ist geschlossen.

Allerdings, wenn ich hinzufügen:

sock = socket(AF_INET, SOCK_STREAM) 

in die If-Block wie folgt:

sock = socket(AF_INET, SOCK_STREAM) 
open_ports_list = [] 

for i in range(port_min, port_max + 1): 
    ipaddress_tup = (ipaddress, i) 
    status = sock.connect_ex(ipaddress_tup) 

    #executed if connect_ex(ipaddress_tup) is successful 
    if status == 0: 
     print('Port',i, 'is OPEN') 
     open_ports_list.append(i) 
     sock = socket(AF_INET, SOCK_STREAM) 

    #executed if connect_ex(ipaddress_tup) is unsuccessful 
    else: 
     print('Port',i,'is CLOSED') 

dann der Code korrekt identifiziert Port 135 und 136 als OPEN.

Also, was ist hier los? Warum behebt die Neudefinition der Socke im if-Block das Problem? und kann ich die korrekten Port-Status-Ergebnisse erhalten, ohne jedes Mal Sockets neu definieren zu müssen, wenn ein offener Port gefunden wird?

Ich habe einen Hinweis von einem Freund gegeben, dass die detach() - Funktion stattdessen verwendet werden kann, aber ich verstehe nicht, was es tut oder wie es zu verwenden ist.

Jede und alle Hilfe würde sehr geschätzt werden.

Antwort

1

Auf den Betriebssystemen, von denen ich weiß, können Sie eine Steckdose nur einmal erfolgreich verbinden.

Sie müssen einen neuen Socket erstellen.

Verwandte Themen