Sukurkite SYN nuskaitymą naudodami „Python“ ir „Scapy“

Turinys

Šioje pamokoje aš jus išmokysiu atlikti TCP SYN nuskaitymo prievadus, tam panaudosiu Python su knygynu Šaukštelis.

Norėdami įdiegti „Python“, galite pamatyti šią pamoką. Norėdami įdiegti „Scapy“ biblioteką „Python“, spustelėkite šį mygtuką:

ATSISIŲSTI „SCAPY“ BIBLIOTEKĄ

Žinant, kas yra SYN nuskaitymas„SYN scan“ yra nuskaitymo technika, taip pat žinoma kaip atviro tipo nuskaitymas, kurią įsilaužėliai naudoja uostų būsenai nustatyti nenustačius visiško ryšio. Taip pat galima naudoti šią techniką DDOS atakoms (paslaugų atsisakymo atakoms) vykdyti.

PastabaJuo siekiama išmokyti, kaip veikia tokio tipo programa ir kad galite išbandyti savo prievadus, bet ne piktnaudžiauti.

Pradėkime nuo prievado skaitytuvo.

1 žingsnis
Pirmas dalykas, kurį mes darome, yra importuoti mums reikalingas bibliotekas.

 importuoti registravimą logging.getLogger ("scapy.runtime"). setLevel (logging.ERROR) iš scapy.all import *
Mes importuojame „scapy“ į savo programą, taip pat importavau registravimą, kad nerodytume erzinančio įspėjimo, jei neturime IPv6 adreso.

2 žingsnis
Žingsnis, kuris padeda pradėti mūsų kintamuosius.

 conf.verb = 0 portlist = list (range (20,130)) host = "192.168.0.1"
Pirmoji šio veiksmo instrukcija atlieka nedidelę konfigūraciją, kad ekrane nebūtų rodoma „Scapy“ informacija. Toliau pridedame tik prievadus ir pagrindinį kompiuterį, kuriame atliksime veiksmą, būtų geriau jį pridėti kaip parametrus vykdant programą (jei norite jį pridėti savo programai, skaitykite šią nuorodą) , palengvinti programą ir ją sutrumpinti.

3 žingsnis
Šis žingsnis yra programos esmė.

 print ("IP adresų nuskaitymas:", priegloba) uosto prievadui paketas, skirtasis laikas = 2) if ("NoneType" str (type (response)))): pass elif (response.haslayer (TCP) ir response.getlayer (TCP). vėliavos == 0x12): p = IP (dst = pagrindinis kompiuteris) / TCP (sportas = šaltinio prievadas, dport = prievadas, vėliavos = "R") spausdinti ("[OPEN]", prievadas, "->", paslauga)
Ši dalis yra kur prasideda uosto nuskaitymas, rodome pranešimą, kad žinotume, jog jis veikia, ir per, nes einame per kiekvieną uostą. Mes naudojame funkciją RandShort () kad siunčiamas paketas kiekvieną kartą kiltų iš skirtingo prievado.

Paketo konstrukcija atliekama pagal antrąją instrukciją, pateiktą for. Mes konfigūruojame mus dominančius duomenis, IP sluoksnio paskirties IP, šaltinio ir paskirties prievadus bei TCP vėliavas, šiuo atveju tai yra SYN skaitytuvas, taigi yra S, pakeitus šį parametrą, galite atlikti kitą tipą skaitytuvo, pvz., FIN arba lango nuskaitymo (tačiau atminkite, kad turėsite pakeisti toliau nurodytas sąlygas).

Funkcija sr1 yra atsakingas už siuntinio siuntimą. Turime perduoti jį kaip argumentą sukurtą paketą (šį kartą jis sukurtas tiesiogiai čia), ir šiuo atveju aš nustatiau maksimalų 2 sekundžių laukimą, galite jį pakeisti, tik jei to nenurodysite, jūsų programa gali tapti begalinis. Paketo siuntimo rezultatas išsaugomas atsako kintamajame.

Esant tokioms sąlygoms, mums įdomu sužinoti, ar turime atsakymą ir ar jame yra suaktyvintos SYN ir ACK vėliavos (todėl naudojame 0x12), jei nenaudojame prieš ir atsakymą. Halayer (TCP), jei taip neturi sluoksnio, bus išmesta išimtis. Jei ši sąlyga bus įvykdyta, atsiųsime pranešimą su aktyvia RST vėliava, kad nutrauktume ryšį. Dalis pabandyk … pagauti galite to nepaisyti, tai tik pašalina paslaugą, naudojamą tame uoste, kad ekrane būtų rodoma daugiau informacijos (funkcija socket.getservbyport (prievadas) jei tai yra žinomas uostas, jis grąžins informaciją, jei ne, išmes išimtį ir, jei taip atsitiks, aš nusprendžiau įdėti ¿? kaip „informacija“, kaip nuoroda į nežinomą.)

Na, mes baigėme, šiame paveikslėlyje galite pamatyti skaitytuvo vykdymo rezultatus:

Žemiau įdėjau visą kodą:

 importuoti registravimą logging.getLogger ("scapy.runtime"). setLevel (logging.ERROR) # Nerodyti įspėjimo iš scapy.all import * conf.verb = 0 # Nerodyti duomenų ekrane listPorts = list (range ( 20,130)) #Naudotinų prievadų sąrašas host = "192.168.0.1" # Čia spausdinamas IP, kurį norite nuskaityti ("IP adresų nuskaitymas:", priegloba), prievadas PortList: sourcePort = RandShort () paketas = IP ( dst = priegloba) / TCP (sportas = šaltinio prievadas, dport = prievadas, vėliavos = "S") atsakymas = sr1 (paketas, skirtasis laikas = 2), jei ("NoneType" str (tipas (atsakymas)))): pass elif (response .haslayer (TCP) ir response.getlayer (TCP). vėliavos == 0x12): p = IP (dst = host) / TCP (sport = sourceport, dport = port, flags = "R") rst = sr (p, timeout = 1) pabandykite: service = socket.getservbyport (port), išskyrus: service = "?" spausdinti ("[OPEN]", prievadas, "->", paslauga) 
[spalva = rgb (169,169,169)] Visas kodas [/ spalva]

PastabaŠis skaitytuvas gali lėtai tikrinti daugelį prievadų, tokiais atvejais patartina naudoti „daugiapakopį“ arba „daugiaprocesinį“. Taip pat galite nuskaityti kitais būdais, naudodami „nmap“ „Python“ arba naudodami neapdorotus lizdus.

Ir jei norite atsisiųsti kodą, pridedu pašto kodą:

Kodas „SynScan.zip“ 644 baitai 254 atsisiuntimai

Ar jums patiko ir padėjo ši pamoka?Galite apdovanoti autorių paspausdami šį mygtuką, kad suteiktumėte jam teigiamą tašką
wave wave wave wave wave