Creați o scanare SYN cu Python și Scapy

Cuprins

În acest tutorial am să vă învăț efectuați o porturi de scanare TCP SYN, pentru asta o voi folosi Piton cu librăria Scapy.

Pentru a instala Python puteți vedea următorul tutorial. Și pentru a instala biblioteca Scapy pentru Python, faceți clic pe următorul buton:

DESCĂRCAȚI BIBLIOTECA SCAPY

Știind ce este o scanare SYNScanarea SYN este o tehnică de scanare cunoscută și sub numele de scanare deschisă, care este utilizată de hackeri pentru a determina starea porturilor fără a stabili o conexiune completă. De asemenea, este posibil să utilizați această tehnică pentru a efectua atacuri DDOS (atacuri de refuz de serviciu).

NotăAcesta are ca scop predarea modului în care funcționează acest tip de program și că vă puteți testa porturile, dar nu să îl utilizați cu răutate.

Să începem cu scanerul de porturi.

Pasul 1
Primul lucru pe care îl facem este să importăm bibliotecile de care avem nevoie.

 import logging logging.getLogger ("scapy.runtime"). setLevel (logging.ERROR) din scapy.all import *
Importăm scapy în programul nostru și am importat, de asemenea, jurnalizarea pentru a nu ne afișa un avertisment enervant dacă nu avem o adresă IPv6.

Pasul 2
Un pas care servește la pornirea variabilelor noastre.

 conf.verb = 0 portlist = list (interval (20,130)) host = "192.168.0.1"
Prima instrucțiune a acestui pas face o mică configurație, astfel încât să nu ne afișeze informațiile Scapy pe ecran. Următoarele adăugăm doar porturile și gazda, unde vom executa acțiunea, ar fi o opțiune mai bună să o adăugăm ca parametri la executarea programului (dacă sunteți interesat să îl adăugați pentru programul dvs., consultați acest link) , pentru a facilita programul și a-l face mai scurt aici este la îndemână.

Pasul 3
Acest pas este nucleul programului.

 print ("Scanare porturi IP:", gazdă) pentru port în portList: sourceport = RandShort () pachet = IP (dst = gazdă) / TCP (sport = sursă port, dport = port, steaguri = "Y") răspuns = sr1 ( pachet, timeout = 2) if ("NoneType" în 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) exceptând: service = "?" print ("[OPEN]", port, "->", serviciu)
Această parte este unde scanarea portului începe, afișăm un mesaj pentru a ști că funcționează și prin for trecem prin fiecare port. Folosim funcția RandShort () astfel încât pachetul trimis provine de la un port diferit de fiecare dată.

Construcția pachetului se face cu a doua instrucțiune găsită în for. Configurăm datele care ne interesează, adresa IP de destinație pentru stratul IP, porturile sursă și destinație și semnalizatoarele pentru TCP, în acest caz este un scaner SYN, deci există S, schimbând acest parametru puteți face un alt tip de scaner, cum ar fi o scanare FIN sau o scanare a ferestrei (dar rețineți că va trebui să modificați condițiile de mai jos).

Functia sr1 este însărcinat cu trimiterea coletului. Trebuie să-l trecem ca argument pe pachetul creat (de data aceasta este creat direct aici) și, în acest caz, am stabilit o așteptare maximă de 2 secunde, îl puteți schimba, numai dacă nu îl indicați, programul dvs. poate deveni infinit. Rezultatul trimiterii pachetului este salvat în variabila de răspuns.

În condițiile în care suntem interesați să știm dacă avem un răspuns și dacă are marcajele SYN și ACK activate (de aceea folosim 0x12), dacă nu folosim înainte de și response.haslayer (TCP), dacă are dacă nu aveți stratul, se va arunca o excepție. Dacă această condiție este îndeplinită, vom trimite un mesaj cu steagul RST activ pentru a întrerupe conexiunea. Partea din încearcă să prinzi îl puteți ignora, tot ce face este să eliminați serviciul utilizat în acel port pentru a afișa mai multe informații pe ecran (funcția socket.getservbyport (port) dacă este un port cunoscut va returna informații, dacă nu va arunca o excepție și dacă se întâmplă acest lucru am ales să pun ¿? ca „informații”, ca indicație a necunoscutului.)

Ei bine, am terminat, în următoarea imagine puteți vedea rezultatul execuției scanerului:

Mai jos am pus codul complet:

 import logging logging.getLogger ("scapy.runtime"). setLevel (logging.ERROR) # Nu afișați avertisment de la scapy.all import * conf.verb = 0 # Nu afișați date pe ecran listPorts = list (range (range ( 20,130)) #Lista de porturi pentru scanare gazdă = "192.168.0.1" # Aici IP-ul pe care doriți să-l scanați tipărit ("Scanare porturi IP:", gazdă) pentru port în PortList: sourcePort = RandShort () pachet = IP ( dst = host) / TCP (sport = sourceport, dport = port, flags = "S") response = sr1 (pachet, timeout = 2) if ("NoneType" in 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) cu excepția: service = "?" print ("[OPEN]", port, "->", serviciu) 
[color = rgb (169,169,169)] Cod complet [/ color]

NotăAcest scaner poate fi lent pentru a verifica multe porturi, în aceste cazuri este o idee bună să utilizați „mulltithreading” sau „multiprocessing”. De asemenea, puteți scana în alte moduri, folosind nmap în Python sau folosind socketuri brute.

Și dacă doriți să descărcați codul, atașez un zip:

Cod SynScan.zip 644 octeți 254 Descărcări

V-a plăcut și ați ajutat acest tutorial?Puteți recompensa autorul apăsând acest buton pentru a-i oferi un punct pozitiv

Vei ajuta la dezvoltarea site-ului, partajarea pagina cu prietenii

wave wave wave wave wave