Lag en SYN -skanning med Python og Scapy

Innholdsfortegnelse

I denne opplæringen skal jeg lære deg utføre en TCP SYN -skanneporter, for dette vil jeg bruke Python med bokhandelen Scapy.

For å installere Python kan du se følgende opplæring. Og for å installere Scapy -biblioteket for Python, klikk på følgende knapp:

LAST NED SCAPY BIBLIOTEK

Å vite hva en SYN -skanning erSYN-skanning er en skanningsteknikk, også kjent som åpen skanning, som brukes av hackere for å bestemme statusen til porter uten å opprette en fullstendig forbindelse. Det er også mulig å bruke denne teknikken til å utføre DDOS -angrep (denial of service -angrep).

MerkDen er rettet mot å lære hvordan denne typen programmer fungerer, og at du kan teste portene dine, men ikke å bruke den ondsinnet.

La oss starte med portskanneren.

Trinn 1
Det første vi gjør er å importere bibliotekene vi trenger.

 import logging logging.getLogger ("scapy.runtime"). setLevel (logging.ERROR) fra scapy.all import *
Vi importerer scapy til programmet vårt, og jeg har også importert logging for at det ikke skal vise oss en irriterende advarsel hvis vi ikke har en IPv6 -adresse.

Steg 2
Et trinn som tjener til å starte våre variabler.

 conf.verb = 0 portlist = liste (område (20,130)) host = "192.168.0.1"
Den første instruksjonen i dette trinnet gjør en liten konfigurasjon slik at den ikke viser oss Scapy -informasjonen på skjermen. Følgende legger vi bare til portene og verten, hvor vi vil utføre handlingen, ville det være et bedre alternativ å legge det til som parametere når du kjører programmet, (hvis du er interessert i å legge det til for programmet, se denne lenken) , for å lette programmet og gjøre det kortere her er praktisk.

Trinn 3
Dette trinnet er kjernen i programmet.

 print ("Skanning av IP -porter:", vert) for port i portList: sourceport = RandShort () packet = IP (dst = host) / TCP (sport = sourceport, dport = port, flags = "Y") respons = sr1 ( packet, timeout = 2) if ("NoneType" in str (type (response))): pass elif (response.haslayer (TCP) and response.getlayer (TCP). flags == 0x12): p = IP (dst = vert) / TCP (sport = sourceport, dport = port, flagg = "R") rst = sr (p, timeout = 1) prøv: service = socket.getservbyport (port) unntatt: service = "?" print ("[OPEN]", port, "->", service)
Denne delen er hvor portskanning starter, viser vi et budskap slik at vi vet at det fungerer, og gjennom for vi går gjennom hver port. Vi bruker funksjonen RandShort () slik at pakken som sendes, kommer fra en annen port hver gang.

Konstruksjonen av pakken gjøres med den andre instruksjonen som finnes i for. Vi konfigurerer dataene som interesserer oss, destinasjons -IP -en for IP -laget, kilde- og destinasjonsportene og flaggene for TCP, i dette tilfellet er det en SYN -skanner, så det er S, ved å endre denne parameteren kan du gjøre en annen type av skanneren, som en FIN -skanning eller en vindusskanning (men vær oppmerksom på at du må endre betingelsene nedenfor).

Funksjonen sr1 har ansvaret for å sende pakken. Vi må sende den som et argument pakken opprettet (denne gangen blir den opprettet direkte her), og i dette tilfellet har jeg satt en maksimal ventetid på 2 sekunder, du kan endre den, bare hvis du ikke angir det, programmet ditt kan bli uendelig. Resultatet av å sende pakken lagres i responsvariabelen.

Under forholdene er vi interessert i å vite om vi har et svar og om det har SYN- og ACK -flaggene aktivert (det er derfor vi bruker 0x12), hvis vi ikke bruker det før og respons.haslayer (TCP), hvis det gjør det ikke har laget et unntak vil bli kastet. Hvis denne betingelsen er oppfylt, sender vi en melding med RST -flagget aktivt for å koble tilkoblingen. Delen av prøv … fange du kan ignorere det, alt det gjør er å fjerne tjenesten som brukes i porten for å vise mer informasjon på skjermen (funksjonen socket.getservbyport (port) hvis det er en kjent port vil det returnere informasjon, hvis ikke vil det kaste et unntak, og hvis dette skjer har jeg valgt å sette ¿? som "informasjon", som en indikasjon på ikke kjent.)

Vel, vi er ferdige, i det følgende bildet kan du se utgangen fra skannerutførelsen:

Nedenfor legger jeg den komplette koden:

 import logging logging.getLogger ("scapy.runtime"). setLevel (logging.ERROR) # Ikke vis advarsel fra scapy.all import * conf.verb = 0 # Ikke vis data på skjermlistenPorts = liste (område ( 20,130)) # Listen over porter som skal skannes host = "192.168.0.1" # Her skriver du ut IP -adressen du vil skanne ("Skann IP -porter:", vert) for port i PortList: sourcePort = RandShort () packet = IP ( dst = host) / TCP (sport = sourceport, dport = port, flagg = "S") respons = sr1 (pakke, timeout = 2) if ("NoneType" i str (type (respons))): pass elif (respons .haslayer (TCP) og response.getlayer (TCP) .flags == 0x12): p = IP (dst = host) / TCP (sport = sourceport, dport = port, flagg = "R") rst = sr (s, timeout = 1) prøv: service = socket.getservbyport (port) unntatt: service = "?" print ("[OPEN]", port, "->", service) 
[color = rgb (169,169,169)] Full kode [/ color]

MerkDenne skanneren kan være treg for å sjekke mange porter, i slike tilfeller er det en god idé å bruke "mulltithreading" eller "multiprocessing". Du kan også skanne på andre måter ved å bruke nmap i Python eller ved å bruke rå stikkontakter.

Og hvis du vil laste ned koden, legger jeg ved en zip:

Kode SynScan.zip 644 byte 254 Nedlastinger

Likte og hjalp du denne opplæringen?Du kan belønne forfatteren ved å trykke på denne knappen for å gi ham et positivt poeng
wave wave wave wave wave