Opret en SYN -scanning med Python og Scapy

Indholdsfortegnelse

I denne tutorial vil jeg lære dig udføre en TCP SYN -scanningsporte, til dette vil jeg bruge Python med boghandlen Scapy.

For at installere Python kan du se følgende vejledning. Og for at installere Scapy -biblioteket til Python skal du klikke på følgende knap:

DOWNLOAD SCAPY BIBLIOTEK

Ved hvad en SYN -scanning erSYN-scanning er en scanningsteknik, også kendt som åben scanning, som bruges af hackere til at bestemme havnenes status uden at etablere en fuld forbindelse. Det er også muligt at bruge denne teknik til at udføre DDOS -angreb (denial of service -angreb).

BemærkDet er rettet mod at lære, hvordan denne type programmer fungerer, og at du kan teste dine porte, men ikke at bruge det ondsindet.

Lad os starte med portscanneren.

Trin 1
Det første, vi gør, er at importere de biblioteker, vi har brug for.

 import logning logging.getLogger ("scapy.runtime"). setLevel (logging.ERROR) fra scapy.all import *
Vi importerer scapy til vores program, og jeg har også importeret logning for ikke at vise os en irriterende advarsel, hvis vi ikke har en IPv6 -adresse.

Trin 2
Et trin, der tjener til at starte vores variabler.

 conf.verb = 0 portlist = liste (område (20,130)) host = "192.168.0.1"
Den første instruktion i dette trin laver en lille konfiguration, så den ikke viser os Scapy -informationerne på skærmen. Det følgende tilføjer vi kun portene og værten, hvor vi vil udføre handlingen, det ville være en bedre mulighed at tilføje det som parametre, når programmet udføres (hvis du er interesseret i at tilføje det til dit program, se dette link) , for at lette programmet og gøre det kortere her er praktisk.

Trin 3
Dette trin er kernen i programmet.

 print ("Scanning IP -porte:", vært) for port i portList: sourceport = RandShort () packet = IP (dst = host) / TCP (sport = sourceport, dport = port, flag = "Y") svar = sr1 ( pakke, timeout = 2) hvis ("NoneType" i str (type (respons))): pass elif (response.haslayer (TCP) og response.getlayer (TCP). flag == 0x12): p = IP (dst = vært) / TCP (sport = sourceport, dport = port, flag = "R") rst = sr (p, timeout = 1) prøv: service = socket.getservbyport (port) undtagen: service = "?" print ("[OPEN]", port, "->", service)
Denne del er hvor portscanning starter, viser vi et budskab, så vi ved, at det virker, og gennem den for vi går gennem hver havn. Vi bruger funktionen RandShort () så den pakke, der sendes, stammer fra en anden port hver gang.

Konstruktionen af ​​pakken udføres med den anden instruktion, der findes i for. Vi konfigurerer de data, der interesserer os, destinations -IP'en for IP -laget, kilde- og destinationsportene og flagene for TCP, i dette tilfælde er det en SYN -scanner, så der er S, hvis du ændrer denne parameter, kan du gøre en anden type scanner, f.eks. en FIN -scanning eller en vinduescanning (men bemærk, at du bliver nødt til at ændre betingelserne herunder).

Funktionen sr1 står for afsendelse af pakken. Vi er nødt til at videregive den som et argument, pakken oprettede (denne gang oprettes den direkte her), og i dette tilfælde har jeg sat en maksimal ventetid på 2 sekunder, du kan kun ændre den, hvis du ikke angiver det, dit program kan blive uendelig. Resultatet af afsendelse af pakken gemmes i responsvariablen.

Under betingelserne er vi interesserede i at vide, om vi har et svar, og om det har SYN- og ACK -flag aktiveret (derfor bruger vi 0x12), hvis vi ikke bruger før og response.haslayer (TCP), hvis det gør det ikke har laget en undtagelse vil blive kastet. Hvis denne betingelse er opfyldt, sender vi en besked med RST -flag aktivt for at afbryde forbindelsen. Den del af prøv … fange du kan ignorere det, alt det gør er at fjerne den service, der bruges i porten for at vise flere oplysninger på skærmen (funktionen socket.getservbyport (port) hvis det er en kendt port, vil det returnere oplysninger, hvis ikke det vil kaste en undtagelse, og hvis dette sker, har jeg valgt at sætte ¿? som "information", som en indikation på ikke kendt.)

Nå, vi er færdige, i det følgende billede kan du se output fra scannerudførelsen:

Nedenfor satte jeg den komplette kode:

 import logging logging.getLogger ("scapy.runtime"). setLevel (logging.ERROR) # Vis ikke advarsel fra scapy.all import * conf.verb = 0 # Vis ikke data på skærmlistenPorte = liste (område ( 20,130)) # Listen over porte, der skal scannes host = "192.168.0.1" # Her udskrives den IP, du vil scanne ("Scanning IP -porte:", host) for port i PortList: sourcePort = RandShort () packet = IP ( dst = vært) / TCP (sport = sourceport, dport = port, flag = "S") svar = sr1 (pakke, timeout = 2) hvis ("NoneType" i str (type (svar))): pass elif (svar .haslayer (TCP) og response.getlayer (TCP) .flags == 0x12): p = IP (dst = host) / TCP (sport = sourceport, dport = port, flag = "R") rst = sr (p, timeout = 1) prøv: service = socket.getservbyport (port) undtagen: service = "?" print ("[OPEN]", port, "->", service) 
[farve = rgb (169.169.169)] Fuld kode [/ farve]

BemærkDenne scanner kan være langsom til at kontrollere mange porte, i de tilfælde er det en god idé at bruge "mulltithreading" eller "multiprocessing". Du kan også scanne på andre måder ved hjælp af nmap i Python eller ved hjælp af rå stikkontakter.

Og hvis du vil downloade koden, vedhæfter jeg en zip:

Kode SynScan.zip 644 bytes 254 downloads

Kan du lide og hjælpe denne vejledning?Du kan belønne forfatteren ved at trykke på denne knap for at give ham et positivt punkt
wave wave wave wave wave