Napravite SYN skeniranje pomoću programa Python i Scapy

Sadržaj

U ovom vodiču ću vas naučiti izvesti portove za skeniranje TCP SYN, za ovo ću koristiti Piton s knjižarom Scapy.

Da biste instalirali Python, možete vidjeti sljedeći vodič. A da biste instalirali Scapy knjižnicu za Python, kliknite sljedeći gumb:

PREUZMITE SCAPY BIBLIOTEKU

Znati što je SYN scanSYN scan je tehnika skeniranja poznata i kao otvoreno skeniranje, koju hakeri koriste za određivanje statusa portova bez uspostavljanja potpune veze. Također je moguće koristiti ovu tehniku ​​za izvođenje DDOS napada (napadi uskraćivanja usluge).

BilješkaNamjera mu je poučiti kako ova vrsta programa radi i kako možete testirati svoje portove, ali ne i koristiti ih zlonamjerno.

Počnimo sa skenerom portova.

Korak 1
Prvo što učinimo je uvoziti potrebne biblioteke.

 uvoz zapisnika logging.getLogger ("scapy.runtime"). setLevel (logging.ERROR) iz scapy.all import *
Uvozimo scapy u naš program, a uveo sam i zapisnike kako nam ne bi prikazivao neugodno upozorenje ako nemamo IPv6 adresu.

Korak 2
Korak koji služi za pokretanje naših varijabli.

 conf.verb = 0 portlist = list (range (20,130)) host = "192.168.0.1"
Prva uputa u ovom koraku čini malu konfiguraciju tako da nam ne prikazuje Scapy podatke na ekranu. U nastavku dodajemo samo portove i host, gdje ćemo izvršiti radnju, bila bi bolja opcija da je dodate kao parametre prilikom izvođenja programa, (ako ste zainteresirani za dodavanje u svoj program, pogledajte ovu vezu) , za olakšavanje programa i skraćivanje ovdje je zgodno.

Korak 3
Ovaj korak je srž programa.

 print ("Skeniranje IP portova:", host) za port u portList: sourceport = RandShort () paket = IP (dst = host) / TCP (sport = izvorni port, dport = port, zastave = "Y") odgovor = sr1 ( paket, timeout = 2) if ("NoneType" u str (type (response))): pass elif (response.haslayer (TCP) i 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) osim: service = "?" ispis ("[OTVORENO"), priključak, "->", usluga)
Ovaj dio je gdje počinje skeniranje portova, pokazujemo poruku kako bismo znali da radi, i kroz for prolazimo kroz svaku luku. Koristimo funkciju RandShort () tako da svaki put poslani paket potječe s drugog porta.

Konstrukcija paketa vrši se s drugom uputom koja se nalazi u for. Konfiguriramo podatke koji nas zanimaju, odredišni IP za IP sloj, izvorne i odredišne ​​portove i zastavice za TCP, u ovom slučaju to je SYN skener, pa postoji S, mijenjanjem ovog parametra možete učiniti drugu vrstu skenera, poput FIN skeniranja ili skeniranja prozora (ali imajte na umu da ćete morati promijeniti dolje navedene uvjete).

Funkcija sr1 je zadužen za slanje paketa. Moramo ga proslijediti kao argument koji je paket stvorio (ovaj put je kreiran izravno ovdje), au ovom slučaju postavio sam maksimalno čekanje od 2 sekunde, možete ga promijeniti, samo ako to ne navedete, vaš program može postati beskonačan. Rezultat slanja paketa sprema se u varijablu odgovora.

U uvjetima koje nas zanima znati imamo li odgovor i ima li aktivirane zastavice SYN i ACK (zato koristimo 0x12), ako ne koristimo prije and response.haslayer (TCP), ako ima nemaju sloj bit će izbačena iznimka. Ako je ovaj uvjet ispunjen, poslat ćemo poruku s aktivnom zastavicom RST kako bismo prekinuli vezu. Dio od pokušaj uhvatiti možete zanemariti, sve što čini je uklanjanje usluge koja se koristi na tom priključku za prikaz više informacija na zaslonu (funkcija socket.getservbyport (port) ako je to poznati port vratit će informacije, ako ne, izbacit će iznimku, a ako se to dogodi, odabrao sam staviti ¿? kao "informacija", kao pokazatelj nepoznatog.)

Pa, završili smo, na sljedećoj slici možete vidjeti izlaz izvedbe skenera:

U nastavku stavljam potpuni kod:

 import logging logging.getLogger ("scapy.runtime"). setLevel (logging.ERROR) # Ne prikazuj upozorenje od scapy.all import * conf.verb = 0 # Ne prikazuj podatke na ekranu listPorts = list (range (range ( 20,130)) # Popis portova za skeniranje host = "192.168.0.1" # Ovdje IP koji želite skenirati ispisuje ("Skeniranje IP portova:", host) za port u PortList: sourcePort = RandShort () paket = IP ( dst = host) / TCP (sport = sourceport, dport = port, flags = "S") response = sr1 (paket, timeout = 2) if ("NoneType" u str (type (response))): pass elif (response .haslayer (TCP) i response.getlayer (TCP) .flags == 0x12): p = IP (dst = host) / TCP (sport = izvorni port, dport = port, zastave = "R") rst = sr (p, timeout = 1) try: service = socket.getservbyport (port) osim: service = "?" ispis ("[OTVORENO"), priključak, "->", usluga) 
[color = rgb (169,169,169)] Cijeli kôd [/ color]

BilješkaOvaj skener može sporo provjeravati mnoge portove, pa je u tim slučajevima dobra ideja upotrijebiti „mulitithreading“ ili „multiprocessing“. Također možete skenirati na druge načine, koristeći nmap unutar Pythona ili koristeći neobrađene utičnice.

A ako želite preuzeti kôd, prilažem vam poštanski broj:

Kodirati SynScan.zip 644 bajta 254 preuzimanja

Je li vam se svidio i pomogao ovaj vodič?Autor možete nagraditi pritiskom na ovaj gumb kako biste mu dali pozitivan bod

Vi ćete pomoći u razvoju web stranice, dijeljenje stranicu sa svojim prijateljima

wave wave wave wave wave