Es lassen sich relativ einfach eigene Protokolle in Scapy nachbauen. Dazu wird einfach eine Klasse erstellt, die von Packet
erbt:
class MY_PROTO(Packet): name = 'Protocol Example' fields_desc = [ BitField('field1', 0, 1), # 1 Bit, initialized to 0 BitField('field2', 3, 7), # 7 Bit, initialized to 3 LEShortField('count_1', 0), # 2-Byte - LittleEndian ShortField('count_2'), # 2-Byte - BigEndian ]
Mit Scapy gebaute Pakete sind byte-aligned, d.h. alle Bitfelder müssen am Ende ein volles Byte ergeben. Notfalls muss ein Padding eingefügt werden!
bind_layers()
. Dabei ist es wichtig alle Änderungen zur gleichen Zeit vorzunehmen und bind_layers()
nur einmal aufzurufen, z.B. so: bind_layers(UDP, MY_PROTO, dport=55555, sport=55555)
, anderenfalls werden teilweise die Felder wieder auf die Default-Werte zurückgesetzt.