Vytvořte skenování SYN pomocí Pythonu a Scapy

Obsah

V tomto tutoriálu vás naučím proveďte skenovací porty TCP SYNK tomu použiji Krajta s knihkupectvím Scapy.

Chcete -li nainstalovat Python, můžete si prohlédnout následující tutoriál. A pro instalaci Scapy knihovny pro Python klikněte na následující tlačítko:

STÁHNĚTE SI SCAPY LIBRARY

Vědět, co je skenování SYNSYN scan je skenovací technika známá také jako skenování s otevřeným koncem, kterou hackeři používají ke zjišťování stavu portů bez navázání úplného připojení. Tuto techniku ​​je také možné použít k provádění útoků DDOS (útoky odmítnutí služby).

PoznámkaJe zaměřen na výuku toho, jak tento typ programu funguje a že můžete testovat své porty, ale nepoužívat je zlomyslně.

Začněme skenerem portů.

Krok 1
První věcí, kterou uděláme, je import knihoven, které potřebujeme.

 import logování logging.getLogger ("scapy.runtime"). setLevel (loggging.ERROR) ze scapy.all import *
Do našeho programu importujeme scapy a já jsem také importoval protokolování, aby nám neukazovalo nepříjemné varování, pokud nemáme adresu IPv6.

Krok 2
Krok, který slouží ke spuštění našich proměnných.

 conf.verb = 0 seznam portů = seznam (rozsah (20,130)) host = "192.168.0.1"
První instrukce tohoto kroku provede malou konfiguraci, aby nám na obrazovce nezobrazovala informace Scapy. Následně přidáme pouze porty a hostitele, kde akci provedeme, bylo by lepší přidat jej jako parametry při provádění programu (pokud máte zájem přidat jej pro svůj program, podívejte se na tento odkaz) Zde je užitečné usnadnit program a zkrátit jej.

Krok 3
Tento krok je jádrem programu.

 tisk ("Skenování IP portů:", hostitel) pro port v portList: sourceport = RandShort () paket = IP (dst = hostitel) / TCP (sport = sourceport, dport = port, vlajky = "Y") odpověď = sr1 ( packet, timeout = 2) if ("NoneType" in str (type (response))): pass elif (response.haslayer (TCP) and 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) kromě: service = "?" tisk ("[OPEN]", port, "->", služba)
Tato část je kde spustí se skenování portu, zobrazujeme zprávu, abychom věděli, že funguje, a skrz pro procházíme každý port. Používáme funkci RandShort () aby odeslaný paket vždy pocházel z jiného portu.

Konstrukce balíčku se provádí pomocí druhé instrukce nalezené v for. Konfigurujeme data, která nás zajímají, cílovou IP pro vrstvu IP, zdrojové a cílové porty a vlajky pro TCP, v tomto případě se jedná o skener SYN, takže existuje S, změnou tohoto parametru můžete udělat jiný typ skeneru, například skenování FIN nebo skenování okna (ale mějte na paměti, že níže uvedené podmínky budete muset změnit).

Funkce sr1 má na starosti odeslání balíčku. Musíme jej předat jako argument, který balíček vytvořil (tentokrát je vytvořen přímo zde), a v tomto případě jsem nastavil maximální čekání 2 sekundy, můžete jej změnit, pouze pokud jej neuvedete, váš program se může stát nekonečným. Výsledek odeslání paketu je uložen do proměnné odpovědi.

V podmínkách nás zajímá, zda máme odpověď a zda má aktivované příznaky SYN a ACK (proto používáme 0x12), pokud nepoužíváme před a response.haslayer (TCP), pokud ano nemají vrstvu, bude vyvolána výjimka. Pokud je tato podmínka splněna, odešleme zprávu s aktivním příznakem RST, abychom spojení přerušili. Část Zkus chytit můžete jej ignorovat, vše, co udělá, je odebrání služby, která je v daném portu použita k zobrazení dalších informací na obrazovce (funkce socket.getservbyport (port) pokud je to známý port, vrátí informace, pokud ne, vyvolá výjimku a pokud k tomu dojde, rozhodl jsem se dát ¿? jako „informace“, jako označení neznámého.)

Hotovo, na následujícím obrázku můžete vidět výstup spuštění skeneru:

Níže jsem vložil kompletní kód:

 import logování logging.getLogger ("scapy.runtime"). setLevel (logging.ERROR) # Nezobrazovat varování ze scapy.all import * conf.verb = 0 # Nezobrazovat data na obrazovce listPorts = seznam (rozsah ( 20,130)) # Seznam portů pro skenování hostitele = "192.168.0.1" # Zde se vytiskne IP adresa, kterou chcete skenovat ("Skenování IP portů:", hostitel) pro port v PortList: sourcePort = RandShort () paket = IP ( dst = host) / TCP (sport = sourceport, dport = port, flags = "S") odpověď = sr1 (paket, časový limit = 2) if ("NoneType" v str (typ (odpověď))): pass elif (odpověď .haslayer (TCP) a 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) kromě: service = "?" tisk ("[OPEN]", port, "->", služba) 
[color = rgb (169,169,169)] Celý kód [/ color]

PoznámkaTento skener může pomalu kontrolovat mnoho portů, v takových případech je vhodné použít „mulltithreading“ nebo „multiprocessing“. Můžete také skenovat jinými způsoby, pomocí nmap v Pythonu nebo pomocí surových soketů.

A pokud si chcete stáhnout kód, přikládám zip:

Kód SynScan.zip 644 bytů 254 stažení

Líbil se vám tento návod a pomohl mu?Autora můžete odměnit stisknutím tohoto tlačítka, čímž mu dáte kladný bod
wave wave wave wave wave