Пакет Scapy Ethernet из байтовой строки теряет информацию верхних слоев
Я пытаюсь создать scapy Ether-пакет из необработанной строки.
packet = packets[4] # this is the packet I get from pcap file
str_packet = str(packet) # I get string form from here
packet2 = Ether(str_packet) # I try to make packet2 from the string
packet.show()
packet2.show()
Выводы здесь показывают, что пакет Ether 2 сформирован неправильно.
Любая идея, как я могу получить package2 из необработанной строки?
###[ Ethernet ]###
dst = 80:e6:50:14:3d:52
src = 2a:74:02:9b:85:64
type = IPv4
###[ IP ]###
version = 4
ihl = 5
tos = 0x0
len = 52
id = 44178
flags =
frag = 0
ttl = 88
proto = tcp
chksum = 0x5503
src = 157.240.13.35
dst = 172.20.10.7
\options \
###[ TCP ]###
sport = https
dport = 60643
seq = 905248884
ack = 938762494
dataofs = 8
reserved = 0
flags = A
window = 113
chksum = 0x43e9
urgptr = 0
options = [('NOP', None), ('NOP', None), ('Timestamp', (2596765797, 886096700))]
###[ Raw ]###
load = "b'\\x80\\xe6P\\x14=R*t\\x02\\x9b\\x85d\\x08\\x00E\\x00\\x004\\xac\\x92\\x00\\x00X\\x06U\\x03\\x9d\\xf0\\r#\\xac\\x14\\n\\x07\\x01\\xbb\\xec\\xe35\\xf5\\x00t7\\xf4`\\xfe\\x80\\x10\\x00qC\\xe9\\x00\\x00\\x01\\x01\\x08\\n\\x9a\\xc7\\x80e4\\xd0\\xc3<'"
1 ответ
В строке 2 используйте raw
вместо того str
. Я извлек часть кадра из файла pcap, как и вы, и вот что я получил:
>>> str(p)
WARNING: Calling str(pkt) on Python 3 makes no sense!
"b'\\xf4\\xca\\xe5Cu\\x10\\x00!\\xcc\\xd3px\\x08\\x00E\\x00\\x004\\xbe\\x05@\\x00@\\x06\\xfb\\xc4\\xc0\\xa8\\x01\\x0f6\\xbf\\x88\\x83\\x96N\\x01\\xbb5M\\x94r\\xd0\\xc7\\xd9\\xae\\x80\\x10\\x01\\xf5\\x81 \\x00\\x00\\x01\\x01\\x08\\np\\xaf\\xdf\\xc4a\\xcf=\\x84'"
>>> raw(p)
b'\xf4\xca\xe5Cu\x10\x00!\xcc\xd3px\x08\x00E\x00\x004\xbe\x05@\x00@\x06\xfb\xc4\xc0\xa8\x01\x0f6\xbf\x88\x83\x96N\x01\xbb5M\x94r\xd0\xc7\xd9\xae\x80\x10\x01\xf5\x81 \x00\x00\x01\x01\x08\np\xaf\xdf\xc4a\xcf=\x84'
>>> Ether(raw(p)).show()
###[ Ethernet ]###
dst= f4:ca:e5:43:75:10
src= 00:21:cc:d3:70:78
type= IPv4
###[ IP ]###
version= 4
ihl= 5
tos= 0x0
len= 52
id= 48645
flags= DF
frag= 0
ttl= 64
proto= tcp
chksum= 0xfbc4
src= 192.168.1.15
dst= 54.191.136.131
\options\
###[ TCP ]###
sport= 38478
dport= https
seq= 894276722
ack= 3502758318
dataofs= 8
reserved= 0
flags= A
window= 501
chksum= 0x8120
urgptr= 0
options= [('NOP', None), ('NOP', None), ('Timestamp', (1890574276, 1640971652))]