Benutzer-Werkzeuge

Webseiten-Werkzeuge


ne:scapy

Scapy

Einführung

Scapy benutzen

Übersicht: ls() listet alle verfügbaren Protokolle und Protokoll-Optionen,
lsc() zeigt alle verfügbaren Scapy Kommandos.

Man kann ls() auch auf ein generiertes Paket anwenden und zeigt die aktuellen sowie die Default-Werte der einzelnen Felder an:

 pkt = Ether()/IP()/UDP()
 ls(pkt)

The summary() method provides a quick look at the packet’s layers:

 pkt.summary()

The show() and show2() methods provide a deeper look into the packet structure:

 pkt.show()  # hierarchische Ansicht
 pkt.show2() # fügt auch dynamisch berechnete Werte ein (Prüfsummen, etc.)

The command() method returns a string with the commands necessary to recreate that packet:

 pkt.command()

haslayer() and getlayer() test for the existence of a layer and return this layer.

Paketgenerierung

i = IP()
t = UDP() # or TCP()
t.sport = t.dport = 50000
d = "some data to send"
p = i/t/d
send(p) # sends at IP level
sendp(Ether()/p) # sends at Ethernet level

Auf die Felder der einzelnen Layer kann auch direkt zugegriffen werden:

>>> p=IP()/UDP()
>>> p[UDP].sport = 123

Scapy-GUI

Generieren von Tunnelpaketen

Fehlende Protokolle

Fragmentierung

Dokumentation

WLAN

Verschiedenes

  • Das Capturing/Decoding ist langsam (cf) bei Problemen kann zusätzlich pypcap benutzt werden (cf)
  • Unter Windows sind möglicherweise nicht alle Interfaces nutzbar (nur die über pcap angebotenen):
    winList = get_windows_if_list()
    intfList = get_if_list()
     
    # Pull guids and names from the windows list
    guidToNameDict = { e["guid"]: e["name"] for e in winList}
     
    # Extract the guids from the interface list
    guidsFromIntfList = [(e.split("_"))[1] for e in intfList]
     
    # Using the interface list of guids, pull the names from the
    # Windows map of guids to names
    namesAllowedList = [guidToNameDict .get( e ) for e in guidsFromIntfList]
  • Für feste und wiederkehrende Test-Abläufe ist scapytain praktisch. Es erlaubt die Definition vieler Tests (mit ja/nein-Resultaten) mit Gruppierungen und Abhängigkeiten.
  • anderes penetration test tool auf Scapy-Basis: http://inguma.eu/projects/inguma
  • Scapy-Pakete haben (undokumentiert) auch Zeitstempel. Alle Pakete haben das Attribut time für den Zeitpunkt der Erstellung (d.h. Instanziierung von Packet()). – Beim Senden wird zudem das Attribut sent_time gesetzt. Bsp.:
     >>> res,unans = srloop(IP(dst=server)/UDP()/DNS(rd=1, id=1, qd=DNSQR(qname=name, qtype=0xff, qclass="IN")), count = 3)
     >>> [res[x][0].time for x in range(len(res))]
     [1323265992.993212, 1323265992.993212, 1323265992.993212]
     >>> [res[x][0].sent_time for x in range(len(res))]
     [1323265993.054496, 1323265994.0183351, 1323265995.0216329]

Aarghh… das ganze funktioniert allerdings nur für einzelne Pakete und nicht für Listen… m.E. ein Bug.

  • Mit den stopper*-Argumenten lässt sich die Funktion sniff auch in Threads benutzen und 'von außen' beenden (Beispiel/Doku). Alternative Implementierung: mit multiprocessing.Event

Installation

Diese Website verwendet Cookies. Durch die Nutzung der Website stimmen Sie dem Speichern von Cookies auf Ihrem Computer zu. Außerdem bestätigen Sie, dass Sie unsere Datenschutzbestimmungen gelesen und verstanden haben. Wenn Sie nicht einverstanden sind, verlassen Sie die Website.Weitere Information
ne/scapy.txt · Zuletzt geändert: 2023/08/28 13:55 von admin