Dieser Artikel zeigt Ihnen den Produktionsprozess der Verwendung von Python3 zur Implementierung eines TCP-Portscanners mit vollständiger Verbindung, einschließlich Ideen und Code. Er ist sehr einfach und leicht zu verstehen 🎜>
bei der Penetration In der Vorphase des Tests müssen wir normalerweise Informationen über das Angriffsziel sammeln, und das Port-Scanning ist ein entscheidender Schritt bei der Informationssammlung. Durch Port-Scanning können wir herausfinden, welche Dienste auf dem Zielhost geöffnet sind, und wir können sogar vermuten, dass es aufgrund der Dienste möglicherweise bestimmte Schwachstellen gibt. TCP-Port-Scans werden im Allgemeinen in die folgenden Typen unterteilt: TCP-Verbindungsscan: Diese Methode wird auch als vollständiger Verbindungsscan bezeichnet. Diese Methode stellt eine direkte Verbindung zum Zielport her und schließt den TCP-Drei-Wege-Handshake-Prozess ab genau, aber langsamer und vom Zielsystem leicht zu erkennen. TCP-SYN-Scan: Diese Methode wird auch als halboffener Scan bezeichnet und sendet ein SYN-Paket, startet eine TCP-Sitzung und wartet auf das Zielantwortpaket. Wenn ein RST-Paket empfangen wird, zeigt dies an, dass der Port geschlossen ist, und wenn ein SYN/ACK-Paket empfangen wird, zeigt es an, dass der entsprechende Port geöffnet ist. Tcp-FIN-Scan: Diese Methode sendet ein FIN-Paket, das den Abbau einer aktiven TCP-Verbindung anzeigt, sodass die andere Partei die Verbindung schließen kann. Wenn ein RST-Paket empfangen wird, zeigt dies an, dass der entsprechende Port geschlossen ist. TCP-XMAS-Scan: Diese Methode sendet Pakete mit auf 1 gesetzten PSH-, FIN-, URG- und TCP-Flag-Bits. Wenn ein RST-Paket empfangen wird, zeigt dies an, dass der entsprechende Port geschlossen ist. Als nächstes verwenden wir Python3, um den TCP-Portscanner für vollständige Verbindungen zu implementieren, und geben dann den LinkProgrammierung ein.
Codierungspraxis
Der Kern der Methode besteht darin, TCP-Verbindungen für verschiedene Ports herzustellen und anhand der Verbindung zu beurteilen, ob der Port geöffnet ist Erfolgreich. Jetzt implementieren wir den einfachsten Port-Scanner: 全连接扫描
#!/usr/bin/python3 # -*- coding: utf-8 -*- from socket import * def portScanner(host,port): try: s = socket(AF_INET,SOCK_STREAM) s.connect((host,port)) print('[+] %d open' % port) s.close() except: print('[-] %d close' % port) def main(): setdefaulttimeout(1) for p in range(1,1024): portScanner('192.168.0.100',p) if name == 'main': main()
, um die Effizienz zu verbessern. Obwohl das Multithreading von Python etwas zu schwach ist, können wir die Zeit, die wir warten, zumindest nutzen, um etwas anderes zu tun. Darüber hinaus wurden zuvor viele Ports gescannt, und die angezeigten Informationen schienen für uns unpraktisch zu sein. Dieses Mal zeigen wir nur die 多线程
an, die uns wichtig sind, und zeigen am Ende des Scans die Anzahl der offenen Ports an. 打开的端口
#!/usr/bin/python3 # -*- coding: utf-8 -*- from socket import * import threading lock = threading.Lock() openNum = 0 threads = [] def portScanner(host,port): global openNum try: s = socket(AF_INET,SOCK_STREAM) s.connect((host,port)) lock.acquire() openNum+=1 print('[+] %d open' % port) lock.release() s.close() except: pass def main(): setdefaulttimeout(1) for p in range(1,1024): t = threading.Thread(target=portScanner,args=('192.168.0.100',p)) threads.append(t) t.start() for t in threads: t.join() print('[*] The scan is complete!') print('[*] A total of %d open port ' % (openNum)) if name == 'main': main()
verwenden, das mit Python3 geliefert wird, um die argparse
-Parameter zu analysieren, sodass wir uns die Mühe ersparen, die -Zeichenfolge selbst zu analysieren! Schauen wir uns den Code an:
#!/usr/bin/python3 # -*- coding: utf-8 -*- from socket import * import threading import argparse lock = threading.Lock() openNum = 0 threads = [] def portScanner(host,port): global openNum try: s = socket(AF_INET,SOCK_STREAM) s.connect((host,port)) lock.acquire() openNum+=1 print('[+] %d open' % port) lock.release() s.close() except: pass def main(): p = argparse.ArgumentParser(description='Port scanner!.') p.add_argument('-H', dest='hosts', type=str) args = p.parse_args() hostList = args.hosts.split(',') setdefaulttimeout(1) for host in hostList: print('Scanning the host:%s......' % (host)) for p in range(1,1024): t = threading.Thread(target=portScanner,args=(host,p)) threads.append(t) t.start() for t in threads: t.join() print('[*] The host:%s scan is complete!' % (host)) print('[*] A total of %d open port ' % (openNum)) if name == 'main': main()
Sehen Sie sich den laufenden Effekt an, wie unten gezeigt:
An diesem Punkt ist unser Port-Scanner im Grunde fertig. Obwohl die Funktion relativ einfach ist und darauf abzielt, die grundlegenden Implementierungsideen des Port-Scanners auszudrücken! Detailliertere Funktionen können auf Basis dieser Grundstruktur schrittweise verbessert werden!
Zusammenfassung
In diesem Abschnitt wird hauptsächlich der Prozess der Implementierung eines einfachen Port-Scanners in Python3 erläutert. Dieses Experiment verwendet jedoch eine vollständige TCP-Verbindung Es gibt einige Mängel. Diese Methode eignet sich am besten für Anfänger. Komplexere Methoden werden in Zukunft nicht mehr schwer zu erlernen sein. Freunde, die aus einem Beispiel Rückschlüsse ziehen möchten, können den Scan abschließen und gleichzeitig das Protokoll basierend auf dem Vergleich zwischen dem Protokoll und dem Port ausgeben. Was die detaillierteren Funktionen betrifft, überlasse ich es jedem Übungen machen!
Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung des Grafikcodes zum Erstellen eines TCP-Port-Scanners mit Python3. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!