Maak een SYN-scan met Python en Scapy

Inhoudsopgave

In deze tutorial ga ik het je leren voer een TCP SYN-scanpoorten uit, hiervoor zal ik gebruiken Python bij de boekhandel Scapy.

Om Python te installeren, kunt u de volgende zelfstudie bekijken. En om de Scapy-bibliotheek voor Python te installeren, klikt u op de volgende knop:

DOWNLOAD SCAPY BIBLIOTHEEK

Weten wat een SYN-scan isSYN-scan is een scantechniek die ook wel open-end scanning wordt genoemd en die door hackers wordt gebruikt om de status van poorten te bepalen zonder een volledige verbinding tot stand te brengen. Het is ook mogelijk om deze techniek te gebruiken om DDOS-aanvallen (denial of service-aanvallen) uit te voeren.

OpmerkingHet is bedoeld om te leren hoe dit type programma werkt en dat je je poorten kunt testen, maar niet om het kwaadaardig te gebruiken.

Laten we beginnen met de poortscanner.

Stap 1
Het eerste wat we doen is de bibliotheken importeren die we nodig hebben.

 import logging logging.getLogger ("scapy.runtime") setLevel (logging.ERROR) van scapy.all import *
We importeren scapy in ons programma en ik heb ook logging geïmporteerd om ervoor te zorgen dat het ons geen vervelende waarschuwing laat zien als we geen IPv6-adres hebben.

Stap 2
Een stap die dient om onze variabelen te starten.

 conf.verb = 0 portlist = lijst (bereik (20.130)) host = "192.168.0.1"
De eerste instructie van deze stap maakt een kleine configuratie zodat deze ons niet de Scapy-informatie op het scherm laat zien. Hierna voegen we alleen de poorten en de host toe, waar we de actie zullen uitvoeren, het zou een betere optie zijn om het als parameters toe te voegen bij het uitvoeren van het programma, (als je geïnteresseerd bent om het voor je programma toe te voegen, raadpleeg dan deze link) , om het programma te vergemakkelijken en korter te maken is hier handig.

Stap 3
Deze stap is de kern van het programma.

 print ("IP-poorten scannen:", host) voor poort in portList: sourceport = RandShort () packet = IP (dst = host) / TCP (sport = sourceport, dport = poort, vlaggen = "Y") response = sr1 ( pakket, time-out = 2) if ("NoneType" in str (type (respons))): pass elif (response.haslayer (TCP) en response.getlayer (TCP). vlaggen == 0x12): p = IP (dst = host) / TCP (sport = sourceport, dport = port, flags = "R") rst = sr (p, timeout = 1) probeer: service = socket.getservbyport (poort) behalve: service = "?" print ("[OPEN]", poort, "->", service)
Dit deel is waar poortscan begint, we tonen een bericht zodat we weten dat het werkt, en via de want we gaan door elke poort. We gebruiken de functie RandKort () zodat het pakket dat wordt verzonden telkens van een andere poort afkomstig is.

De constructie van het pakket wordt gedaan met de tweede instructie in de voor. We configureren de gegevens die ons interesseren, het bestemmings-IP voor de IP-laag, de bron- en bestemmingspoorten en de vlaggen voor TCP, in dit geval is het een SYN-scanner, dus er is de S, als u deze parameter wijzigt, kunt u een ander type doen van scanner, zoals een FIN-scan of een vensterscan (maar houd er rekening mee dat u de onderstaande voorwaarden moet wijzigen).

De functie sr1 is verantwoordelijk voor het verzenden van het pakket. We moeten het als argument doorgeven dat het pakket is gemaakt (deze keer is het hier direct gemaakt), en in dit geval heb ik een maximale wachttijd van 2 seconden ingesteld, je kunt het wijzigen, alleen als je het niet aangeeft, je programma oneindig kan worden. Het resultaat van het verzenden van het pakket wordt opgeslagen in de responsvariabele.

In de voorwaarden zijn we geïnteresseerd om te weten of we een reactie hebben en of de SYN- en ACK-vlaggen zijn geactiveerd (daarom gebruiken we 0x12), als we niet vóór de en response.haslayer (TCP) gebruiken, als dat zo is niet de laag hebben, wordt een uitzondering gegenereerd. Als aan deze voorwaarde is voldaan, sturen we een bericht met de RST-vlag actief om de verbinding te verbreken. Het deel van proberen te vangen je kunt het negeren, het enige wat het doet is de service verwijderen die in die poort wordt gebruikt om meer informatie op het scherm te tonen (de functie socket.getservbyport (poort) als het een bekende poort is, zal het informatie retourneren, zo niet, dan zal het een uitzondering genereren en als dit gebeurt, heb ik ervoor gekozen om ¿? als "informatie", als aanduiding van niet bekend.)

Welnu, we zijn klaar, in de volgende afbeelding ziet u de uitvoer van de scanneruitvoering:

Hieronder plaats ik de volledige code:

 import logging logging.getLogger ("scapy.runtime") setLevel (logging.ERROR) # Toon geen waarschuwing van scapy.all import * conf.verb = 0 # Toon geen gegevens op het scherm listPorts = lijst (bereik ( 20,130) ) #De lijst met te scannen poorten host = "192.168.0.1" # Hier wordt het IP-adres dat u wilt scannen afgedrukt ("IP-poorten scannen:", host) voor poort in PortList: sourcePort = RandShort () packet = IP ( dst = host) / TCP (sport = sourceport, dport = port, flags = "S") response = sr1 (pakket, time-out = 2) if ("NoneType" in str (type (respons))): pass elif (response) .haslayer (TCP) en response.getlayer (TCP) .flags == 0x12): p = IP (dst = host) / TCP (sport = sourceport, dport = port, flags = "R") rst = sr (p, timeout = 1) probeer: service = socket.getservbyport (poort) behalve: service = "?" print ("[OPEN]", poort, "->", service) 
[kleur = rgb (169,169,169)] Volledige code [/ kleur]

OpmerkingDeze scanner kan veel poorten traag controleren, in die gevallen is het een goed idee om "mulltithreading" of "multiprocessing" te gebruiken. U kunt ook op andere manieren scannen, met nmap in Python of met onbewerkte sockets.

En als je de code wilt downloaden, voeg ik een zip toe:

Code SynScan.zip 644 bytes 254 Downloads

Vond je deze Tutorial leuk en heb je eraan geholpen?Je kunt de auteur belonen door op deze knop te drukken om hem een ​​positief punt te geven

U zal helpen de ontwikkeling van de site, het delen van de pagina met je vrienden

wave wave wave wave wave