Когда нюхать пакеты с scapy я могу сохранить их в переменнойПреобразование понюхал пакет scapy в байты
sniffed = sniff(count=1)
Теперь я хотел бы видеть, что внутри пакета, делая
print sniffed
или
print str(sniffed)
, но все это дает мне примерно следующее:
������0� [email protected]@����������� l��
Это не совсем то, что мне нужно. Итак, как я могу преобразовать sniffed пакет в человекочитаемый Binary или массив Bytes или что-то более полезное, чтобы я мог видеть, что внутри? Я уже пробовал использовать struct.unpack(format, packet)
с форматами, такими как "!B"
, но это не кажется правильным решением, потому что пакет может быть длиннее одного байта или короткого или Int.
Пример того, что я пытаюсь
>>> packet = sniff(count=1)[0]
>>> hexdump(packet)
0000 00 50 56 8E 00 0D 14 CC 20 16 E7 59 08 00 45 00 .PV..... ..Y..E.
0010 00 34 6B AB 40 00 40 06 C6 48 AC 11 8A E2 68 10 [email protected]@..H....h.
0020 69 CC B5 47 00 50 E9 85 17 B0 BA EF 29 B2 80 10 i..G.P......)...
0030 01 DD 8D 58 00 00 01 01 08 0A 00 0E A2 C0 03 5D ...X...........]
0040 9D 1C
>>> packetByteArray = bytearray(repr(str(packet)))
>>> hex(packetByteArray[0])
'0x27'
>>>
Но в шестнадцатеричного я могу видеть, что первый байт фактически 0x00
и не 0x27
'hexdump' дает мне то, что мне нужно, но как я могу легко получить доступ к пакетам Bytes? Как 'firstByteOfPacket = пакет [0]' ?. В настоящее время я пытаюсь сделать это с помощью 'packetByteArray = bytearray (repr (str (пакет))), а затем' firstByteOfPacket = packetByteArray [0] 'ожидает получения первого байта пакета. Тем не менее это дает мне то, что явно не является первым байтом, как я вижу из «hexdump». Я добавлю пример в свой вопрос. – vicco
см. Обновленный ответ. просто выполните сериализацию слоя/пакета и получите доступ к любому из байтов как 'str (pkt) [1]', чтобы получить атрибут ascii или 'ord (str (pkt) [1])', чтобы получить значение. все остальное - всего лишь вопрос представления. – tintin
Да, это то, что мне нужно. – vicco