Erstellen Sie einen SYN-Scan mit Python und Scapy

Inhaltsverzeichnis

In diesem Tutorial werde ich es dir beibringen Führen Sie einen TCP-SYN-Scan-Ports durch, dafür werde ich verwenden Python mit der Buchhandlung Scapy.

Um Python zu installieren, können Sie das folgende Tutorial sehen. Und um die Scapy-Bibliothek für Python zu installieren, klicken Sie auf die folgende Schaltfläche:

SCAPY-BIBLIOTHEK HERUNTERLADEN

Wissen, was ein SYN-Scan istSYN-Scan ist eine Scan-Technik, die auch als Open-Ended-Scan bezeichnet wird und von Hackern verwendet wird, um den Status von Ports zu ermitteln, ohne eine vollständige Verbindung herzustellen. Auch DDOS-Angriffe (Denial-of-Service-Attacken) können mit dieser Technik durchgeführt werden.

NotizEs soll Ihnen beibringen, wie diese Art von Programm funktioniert und dass Sie Ihre Ports testen können, aber nicht, um sie böswillig zu verwenden.

Beginnen wir mit dem Port-Scanner.

Schritt 1
Als erstes importieren wir die benötigten Bibliotheken.

 import Logging Logging.getLogger ("scapy.runtime").setLevel (logging.ERROR) from scapy.all import *
Wir importieren scapy in unser Programm, und ich habe auch das Logging importiert, damit es uns keine nervige Warnung anzeigt, wenn wir keine IPv6-Adresse haben.

Schritt 2
Ein Schritt, der dazu dient, unsere Variablen zu starten.

 conf.verb = 0 portlist = Liste (Bereich (20,130)) host = "192.168.0.1"
Die erste Anweisung dieses Schrittes macht eine kleine Konfiguration, damit uns die Scapy-Informationen nicht auf dem Bildschirm angezeigt werden. Im Folgenden fügen wir nur die Ports und den Host hinzu, auf denen wir die Aktion ausführen werden. , um das Programm zu vereinfachen und zu verkürzen, ist hier praktisch.

Schritt 3
Dieser Schritt ist der Kern des Programms.

 print ("Scanning IP ports:", host) für Port in portList: sourceport = RandShort () packet = IP (dst = host) / TCP (sport = sourceport, dport = port, flags = "Y") response = sr1 ( Paket, Timeout = 2) if ("NoneType" in str (type (response))): pass elif (response.haslayer (TCP) und response.getlayer (TCP). Flags == 0x12): p = IP (dst = .) host) / TCP (sport = sourceport, dport = port, flags = "R") rst = sr (p, timeout = 1) try: service = socket.getservbyport (port) außer: service = "?" print ("[OPEN]", Port, "->", Dienst)
Dieser Teil ist wo Portscan startet, wir zeigen eine Nachricht an, damit wir wissen, dass es funktioniert, und durch die denn wir gehen durch jeden Port. Wir verwenden die Funktion RandKurz () so dass das gesendete Paket jedes Mal von einem anderen Port stammt.

Der Aufbau des Pakets erfolgt mit der zweiten Anweisung im for. Wir konfigurieren die Daten, die uns interessieren, die Ziel-IP für die IP-Schicht, die Quell- und Zielports und die Flags für TCP, in diesem Fall ist es ein SYN-Scanner, also gibt es das S. Wenn Sie diesen Parameter ändern, können Sie einen anderen Typ auswählen des Scanners, wie ein FIN-Scan oder ein Fenster-Scan (beachten Sie jedoch, dass Sie die folgenden Bedingungen ändern müssen).

Die Funktion sr1 ist für den Versand des Pakets verantwortlich. Wir müssen als Argument das erstellte Paket übergeben (dieses Mal wird es direkt hier erstellt), und in diesem Fall habe ich eine maximale Wartezeit von 2 Sekunden festgelegt, Sie können es nur ändern, wenn Sie es nicht angeben, Ihr Programm kann unendlich werden. Das Ergebnis des Sendens des Pakets wird in der Antwortvariablen gespeichert.

In den Bedingungen interessiert uns, ob wir eine Antwort haben und ob die SYN- und ACK-Flags aktiviert sind (deshalb verwenden wir 0x12), wenn wir nicht vor und response.haslayer (TCP) verwenden, wenn dies der Fall ist Wenn der Layer nicht vorhanden ist, wird eine Ausnahme ausgelöst. Wenn diese Bedingung erfüllt ist, senden wir eine Nachricht mit aktivem RST-Flag, um die Verbindung zu trennen. Der Teil von versuchen … fangen Sie können es ignorieren, es entfernt lediglich den Dienst, der in diesem Port verwendet wird, um mehr Informationen auf dem Bildschirm anzuzeigen (die Funktion socket.getservbyport (Port) wenn es ein bekannter Port ist, gibt er Informationen zurück, wenn nicht, wird eine Ausnahme ausgelöst und wenn dies passiert, habe ich mich dafür entschieden, ¿? als "Information", als Hinweis auf nicht bekannt.)

Nun, wir sind fertig, im folgenden Bild sehen Sie die Ausgabe der Scannerausführung:

Unten habe ich den kompletten Code eingefügt:

 import logging Logging.getLogger ("scapy.runtime"). setLevel (logging.ERROR) # Keine Warnung von scapy.all anzeigen import * conf.verb = 0 # Keine Daten auf dem Bildschirm anzeigen listPorts = list (range ( 20,130) ) #Die Liste der zu scannenden Ports host = "192.168.0.1" # Hier die zu scannende IP drucken ("Scanning IP ports:", host) für Port in PortList: sourcePort = RandShort () packet = IP ( dst = host) / TCP (sport = sourceport, dport = port, flags = "S") response = sr1 (packet, timeout = 2) if ("NoneType" in str (type (response))): pass elif (response .haslayer (TCP) und response.getlayer (TCP) .flags == 0x12): p = IP (dst = host) / TCP (sport = sourceport, dport = port, flags = "R") rst = sr (p, timeout = 1) try: service = socket.getservbyport (port) außer: service = "?" print ("[OPEN]", Port, "->", Dienst) 
[Farbe = RGB (169,169,169)] Vollständiger Code [/Farbe]

NotizDieser Scanner kann bei der Überprüfung vieler Ports langsam sein. In diesen Fällen ist es eine gute Idee, "Multithreading" oder "Multiprocessing" zu verwenden. Sie können auch auf andere Weise scannen, indem Sie nmap in Python verwenden oder Raw-Sockets verwenden.

Und wenn Sie den Code herunterladen möchten, hänge ich eine ZIP-Datei an:

Code SynScan.zip 644 Byte 254 Downloads

Hat dir dieses Tutorial gefallen und geholfen?Sie können den Autor belohnen, indem Sie diesen Knopf drücken, um ihm einen positiven Punkt zu geben
wave wave wave wave wave