Ich versuche zu verstehen, wie Sie einen benutzerdefinierten Dissektor in Scapy hinzufügen. Ich verwende Python 3.4 und Scapy3, wenn das Auswirkungen auf das Ergebnis hat.Scapy: Zugriff auf eine benutzerdefinierte Ebene
Ich habe eine dumme Klasse, und der packet.show2() Befehl rendert korrekt das verschachtelte Paket. Aber ich kann nicht auf die neuen Feldwerte für Ebenen zugreifen.
Scary Klasse und bind_layer folgt ...
from scapy.all import *
#Create simple Class
class DUMBO(Packet):
fields_desc = [
ShortField('ears',0),
ShortField('legs',0),
ShortField('trunk',0)
]
#Inform TCP that ports 9898 are this protocol
bind_layers(TCP, DUMBO, sport=9898, dport=9898)
Ich mache ein Paket wie dieses
#Make a Packet
pack=IP()/TCP(sport=9898, dport=9898)/Raw(load=b'\x00\x02\x00\x04\x00\x01')
im Packet Suche ich geschaffen habe ls Erträge
version : BitField = 4 (4)
ihl : BitField = None (None)
tos : XByteField = 0 (0)
len : ShortField = None (None)
id : ShortField = 1 (1)
flags : FlagsField = 0 (0)
frag : BitField = 0 (0)
ttl : ByteField = 64 (64)
proto : ByteEnumField = 6 (0)
chksum : XShortField = None (None)
src : Emph = '127.0.0.1' (None)
dst : Emph = '127.0.0.1' ('127.0.0.1')
options : PacketListField = [] ([])
--
sport : ShortEnumField = 9898 (20)
dport : ShortEnumField = 9898 (80)
seq : IntField = 0 (0)
ack : IntField = 0 (0)
dataofs : BitField = None (None)
reserved : BitField = 0 (0)
flags : FlagsField = 2 (2)
window : ShortField = 8192 (8192)
chksum : XShortField = None (None)
urgptr : ShortField = 0 (0)
options : TCPOptionsField = {} ({})
--
load : StrField = b'\x00\x02\x00\x04\x00\x01' (b'')
mit und Anzeige mit Show2 alles sieht gut aus
pack.show2()
###[ IP ]###
version = 4
ihl = 5
tos = 0x0
len = 46
id = 1
flags =
frag = 0
ttl = 64
proto = tcp
chksum = 0x7cc7
src = 127.0.0.1
dst = 127.0.0.1
\options \
###[ TCP ]###
sport = monkeycom
dport = monkeycom
seq = 0
ack = 0
dataofs = 5
reserved = 0
flags = S
window = 8192
chksum = 0x447f
urgptr = 0
options = []
###[ DUMBO ]###
ears = 2
legs = 4
trunk = 1
ich jetzt die DUMBO Schichtfelder
Aber PACK [DUMBO] .ears
Ist das nicht richtig zugreifen wollen - wie das Paket, wenn sie als pack.show angezeigt() noch die Payload as Raw ....
Was fehlt mir?