Izveidojiet SYN skenēšanu, izmantojot Python un Scapy

Satura rādītājs

Šajā apmācībā es jūs iemācīšu veikt TCP SYN skenēšanas portus, šim es izmantošu Python ar grāmatnīcu Slikts.

Lai instalētu Python, varat redzēt šo pamācību. Un, lai instalētu Scapy bibliotēku Python, noklikšķiniet uz šīs pogas:

LEJUPIELĀDĒT SKAISTU BIBLIOTĒKU

Zinot, kas ir SYN skenēšanaSYN skenēšana ir skenēšanas tehnika, kas pazīstama arī kā atvērtā skenēšana, ko hakeri izmanto, lai noteiktu ostu statusu, neveidojot pilnu savienojumu. Šo paņēmienu ir iespējams izmantot arī DDOS uzbrukumu veikšanai (pakalpojumu atteikuma uzbrukumi).

PiezīmeTās mērķis ir iemācīt, kā darbojas šāda veida programma un ka jūs varat pārbaudīt savas ostas, bet ne izmantot to ļaunprātīgi.

Sāksim ar ostas skeneri.

1. darbība
Pirmā lieta, ko mēs darām, ir vajadzīgo bibliotēku importēšana.

 importēt reģistrēšanu logging.getLogger ("scapy.runtime"). setLevel (logging.ERROR) no scapy.all importa *
Mēs savā programmā importējam scapy, un esmu importējis arī mežizstrādi, lai tā mums nerādītu kaitinošu brīdinājumu, ja mums nav IPv6 adreses.

2. solis
Solis, kas kalpo, lai sāktu mūsu mainīgos.

 conf.verb = 0 portlist = list (range (20,130)) host = "192.168.0.1"
Šī soļa pirmā instrukcija veic nelielu konfigurāciju, lai ekrānā mums netiktu parādīta Scapy informācija. Tālāk mēs pievienojam tikai portus un resursdatoru, kurā veiksim darbību, labāka iespēja būtu to pievienot kā parametrus, izpildot programmu (ja jūs interesē tās pievienošana savai programmai, skatiet šo saiti) , lai atvieglotu programmu un padarītu to īsāku, šeit ir ērti.

3. solis
Šis solis ir programmas kodols.

 print ("IP portu skenēšana:", resursdators) portam portList: sourceport = RandShort () pakete = IP (dst = resursdators) / TCP (sports = avota ports, dport = ports, karogi = "Y") atbilde = sr1 ( pakete, taimauts = 2) if ("NoneType" in str (type (response))): pass elif (response.haslayer (TCP) un response.getlayer (TCP). flags == 0x12): p = IP (dst = resursdators) / TCP (sports = avota ports, dport = ports, karodziņi = "R") pirmais = sr (p, taimauts = 1) mēģiniet: service = socket.getservbyport (ports), izņemot: service = "?" drukāt ("[OPEN]", ports, "->", pakalpojums)
Šī daļa ir kur sākas porta skenēšana, mēs rādām ziņojumu, lai mēs zinātu, ka tas darbojas, un caur mums iet caur katru ostu. Mēs izmantojam funkciju RandShort () lai nosūtītā pakete katru reizi nāktu no cita porta.

Pakotnes konstrukcija tiek veikta, izmantojot otro instrukciju, kas atrodama for. Mēs konfigurējam mūs interesējošos datus, IP slāņa galamērķa IP, avota un galamērķa portus un TCP karodziņus, šajā gadījumā tas ir SYN skeneris, tāpēc ir S, mainot šo parametru, varat veikt citu veidu skeneris, piemēram, FIN skenēšana vai loga skenēšana (taču ņemiet vērā, ka jums būs jāmaina tālāk minētie nosacījumi).

Funkcija sr1 ir atbildīgs par pakas nosūtīšanu. Mums tas ir jānorāda kā arguments izveidotā pakete (šoreiz tā ir izveidota tieši šeit), un šajā gadījumā esmu iestatījis maksimālo gaidīšanas laiku 2 sekundes, jūs varat to mainīt, tikai tad, ja to nenorādāt, jūsu programma var kļūt bezgalīgs. Pakotnes nosūtīšanas rezultāts tiek saglabāts atbildes mainīgajā.

Apstākļos mēs esam ieinteresēti zināt, vai mums ir atbilde un vai tajā ir aktivizēti karodziņi SYN un ACK (tāpēc mēs izmantojam 0x12), ja neizmantojam pirms un atbildes. Haslayer (TCP), ja tas notiek nav slāņa, tiks izmests izņēmums. Ja šis nosacījums ir izpildīts, mēs nosūtīsim ziņojumu ar aktīvu RST karodziņu, lai pārtrauktu savienojumu. Daļa no mēģiniet… noķert Jūs varat to ignorēt, viss, kas tiek darīts, ir noņemt pakalpojumu, kas tiek izmantots šajā ostā, lai ekrānā parādītu vairāk informācijas (funkcija socket.getservbyport (ports) ja tā ir zināma osta, tā atgriezīs informāciju, ja nē, izmetīs izņēmumu, un, ja tas notiks, es izvēlējos ievietot ¿? kā "informācija", kā norāde uz nezināmu.)

Mēs esam pabeiguši, nākamajā attēlā varat redzēt skenera izpildes rezultātu:

Zemāk es ievietoju pilnu kodu:

 importēt reģistrēšanu logging.getLogger ("scapy.runtime"). setLevel (logging.ERROR) # Nerādīt scapy.all brīdinājumu importēt * conf.verb = 0 # Nerādīt datus ekrānā listPorts = list (range ( 20,130)) # Skenējamo portu saraksts saimnieks = "192.168.0.1" # Šeit tiek izdrukāts IP, kuru vēlaties skenēt ("IP portu skenēšana:", resursdators) portam PortList: sourcePort = RandShort () pakete = IP ( dst = resursdators) / TCP (sports = avota ports, dport = ports, karodziņi = "S") atbilde = sr1 (pakete, taimauts = 2), ja ("NoneType" str (tips (atbilde)))): pass elif (response .haslayer (TCP) un response.getlayer (TCP). karogi == 0x12): p = IP (dst = resursdators) / TCP (sports = avota ports, dport = ports, karogi = "R") rst = sr (p, taimauts = 1) mēģiniet: service = socket.getservbyport (ports), izņemot: service = "?" drukāt ("[OPEN]", ports, "->", pakalpojums) 
[krāsa = rgb (169,169,169)] Pilns kods [/ krāsa]

PiezīmeŠis skeneris var palēnināt daudzu portu pārbaudi, un šādos gadījumos ieteicams izmantot “multifithinging” vai “multiprocessing”. Varat arī skenēt citos veidos, izmantojot nmap programmā Python vai izmantojot neapstrādātas kontaktligzdas.

Un, ja vēlaties lejupielādēt kodu, es pievienoju pasta indeksu:

Kods SynScan.zip 644 baiti 254 lejupielādes

Vai jums patika šī apmācība un palīdzējāt tai?Jūs varat apbalvot autoru, nospiežot šo pogu, lai sniegtu viņam pozitīvu punktu
wave wave wave wave wave