Erstellen Sie einen SYN-Scan mit Python und Scapy

In diesem Tutorial zeige ich Ihnen, wie Sie einen TCP-SYN-Scan-Scanner durchführen . Dazu verwende ich Python mit der Scapy- Bibliothek.

Um Python zu installieren, sehen Sie das folgende Tutorial . 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 ist
SYN-Scan ist eine Scan-Technik, die auch als “Scannen zwischen offen” bezeichnet wird und von Hackern verwendet wird, um den Status von Ports zu ermitteln, ohne eine vollständige Verbindung herzustellen. Mit dieser Technik können auch DDOS-Angriffe (Denial-of-Service-Angriffe) ausgeführt werden.

Hinweis
Es soll zeigen, wie diese Art von Programm funktioniert und dass Sie Ihre Ports testen können, ohne sie böswillig zu verwenden.

Beginnen wir mit dem Port-Scanner.

Schritt 1

Als erstes importieren wir die benötigten Buchhandlungen.

 Importprotokollierung logging.getLogger ("scapy.runtime"). setLevel (logging.ERROR) von scapy.all importieren * 

Wir importieren scapy in unser Programm. Außerdem habe ich die Protokollierung importiert, damit keine nervige Warnung angezeigt wird, wenn wir keine IPv6-Adresse haben.

Schritt 2

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

 conf.verb = 0 Portliste = Liste (Bereich (20.130)) host = "192.168.0.1" 

In der ersten Anweisung dieses Schritts wird eine kleine Konfiguration vorgenommen, damit die Scapy-Informationen nicht auf dem Bildschirm angezeigt werden. e mete a mano. Im Folgenden werden nur die Ports und der Host hinzugefügt, auf denen die Aktion ausgeführt werden soll. Es ist eine bessere Option, sie bei der Ausführung des Programms als Parameter hinzuzufügen (wenn Sie daran interessiert sind, sie zu Ihrem Programm hinzuzufügen, siehe diesen Link ), um das Programm zu vereinfachen und zu erstellen kürzer hier, und setzen Sie es von Hand.

Schritt 3

Dieser Schritt ist der Kern des Programms.

 print ("Scannen der Ports der IP:", Host) für puerto in listaPuertos: PortOrigen = RandShort () Paket = IP (dst = Host) / TCP (sport = portOrigin, dport = port, flags = "S") antwort = sr1 (pack, timeout = 2) if ("NoneType" in str (Typ (Antwort))): bestehen elif (answer.haslayer (TCP) und answer.getlayer (TCP) .flags == 0x12): p = IP (dst = Host) / TCP (sport = portOrigin, dport = port, flags = "R") rst = sr (p, timeout = 1) versuche: service = socket.getservbyport (port) außer: service = "?" print ("[OPEN]", port, "->", service) 

In diesem Teil beginnt der Port-Scan . Wir zeigen eine Meldung an, damit wir wissen, dass wir arbeiten, und durchlaufen die für jeden Port . Wir verwenden die RandShort () -Funktion, damit das gesendete Paket jedes Mal von einem anderen Port stammt.

See also  Sicherheitslücke im Hedera-Mainnet: Team arbeitet an der Behebung

Der Aufbau des Pakets erfolgt mit der zweiten Anweisung, die im for zu finden ist . Wir konfigurieren die Daten, die uns interessieren, die Ziel-IP für die IP-Schicht, die Quell- und Ziel-Ports und die Flags für TCP. In diesem Fall handelt es sich um einen SYN-Scanner Scanner, wie ein FIN-Scan oder ein Fenster-Scan (aber denken Sie daran, dass Sie die Bedingungen ändern müssen, die unten angezeigt werden).

Die Funktion sr1 ist für das Senden des Pakets verantwortlich . Wir müssen das erstellte Paket als Argument übergeben (diesmal wird es direkt hier erstellt), und in diesem Fall habe ich maximal 2 Sekunden angegeben, Sie können es ändern, nur wenn Sie es nicht angeben, können Sie Ihr Programm unendlich machen. Das Ergebnis des Sendens des Pakets wird in der Antwortvariablen gespeichert.

Unter den Bedingungen sind wir daran interessiert zu wissen, ob wir eine Antwort haben und ob die SYN- und ACK-Flags aktiviert sind (deshalb verwenden wir 0x12). Wenn wir sie nicht vor der und answer.haslayer (TCP) verwendet haben, wird eine Ausnahme ausgelöst, wenn die Ebene nicht vorhanden ist. Wenn diese Bedingung erfüllt ist, senden wir eine Nachricht mit dem aktiven RST-Flag, um die Verbindung zu trennen. Der try … catch-Teil kann ignoriert werden. Das Einzige, was Sie tun müssen, ist, den in diesem Port verwendeten Dienst zu entfernen, um weitere Informationen auf dem Bildschirm anzuzeigen (die Funktion socket.getservbyport (port) gibt Informationen zurück, wenn es sich um einen bekannten Port handelt. Andernfalls wird eine Ausnahme ausgelöst, und in diesem Fall habe ich “?” als “Information” angegeben, als Hinweis auf Unbekannt.)

See also  So ändern Sie den Sperrbildschirm Windows 10

Nun haben wir es geschafft, auf dem folgenden Bild können Sie die Ausgabe der Scannerausführung sehen:

SynScan.jpg

Als nächstes gebe ich den vollständigen Code ein:

 Importprotokollierung logging.getLogger ("scapy.runtime"). setLevel (logging.ERROR) # Es wird keine Warnung angezeigt von scapy.all importieren * conf.verb = 0 #Was zeigt keine Daten auf dem Bildschirm Portlist = list (range (20,130)) # Die Liste der zu durchsuchenden Ports host = "192.168.0.1" # Hier die IP, die Sie scannen möchten print ("Scannen der Ports der IP:", Host) für puerto in listaPuertos: PortOrigen = RandShort () Paket = IP (dst = Host) / TCP (sport = portOrigin, dport = port, flags = "S") antwort = sr1 (pack, timeout = 2) if ("NoneType" in str (Typ (Antwort))): bestehen elif (answer.haslayer (TCP) und answer.getlayer (TCP) .flags == 0x12): p = IP (dst = Host) / TCP (sport = portOrigin, dport = port, flags = "R") rst = sr (p, timeout = 1) versuche: service = socket.getservbyport (port) außer: service = "?" print ("[OPEN]", port, "->", service) 

[/color] [color = rgb (169,169,169)] Vollständiger Code [/ color]

Hinweis
In solchen Fällen ist es empfehlenswert, “Mulltithreading” oder “Multiprocessing” zu verwenden. Sie können auch auf andere Weise scannen, indem Sie nmap in Python oder Raw-Sockets verwenden.

Und wenn Sie den Code herunterladen möchten, habe ich eine Zip angehängt:

Code
Angehängte Datei 154 Descargas SynScan.zip 644 Bytes 154 Downloads

administrator

Leave a Reply

Your email address will not be published. Required fields are marked *