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:
Beginnen wir mit dem Port-Scanner.
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.
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.
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.
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.)
Nun haben wir es geschafft, auf dem folgenden Bild können Sie die Ausgabe der Scannerausführung sehen:
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]
Und wenn Sie den Code herunterladen möchten, habe ich eine Zip angehängt: