Ü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.
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
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]
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.
stopper*
-Argumenten lässt sich die Funktion sniff
auch in Threads benutzen und 'von außen' beenden (Beispiel/Doku). Alternative Implementierung: mit multiprocessing.Event