2016-01-14 18 views
0

当嗅探与Scapy的包,我可以将它们保存到一个变量转换一闻Scapy的包字节

sniffed = sniff(count=1) 

现在我想看看有什么包里面做

print sniffed 

print str(sniffed) 

但这一切给我的是类似于以下内容:

������0� [email protected]@����������� l�� 

这不是我所需要的。那么,如何将一个嗅探的数据包转换为人类可读的二进制文件或一组字节或更有用的东西,以便我可以看到里面有什么?我已经尝试使用struct.unpack(format, packet),其格式为"!B",但这似乎不是正确的解决方案,因为数据包可能长于一个字节或Short或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' 
>>> 

但在hexdump都可以,我可以看到,第一个字节实际上是0x00而不是0x27

回答

1

您可能正在寻找scapy Hexdump(pkt) or hexraw(pkt)repr(str(pkt))用于字符串编码输出。请注意,嗅探返回一个列表,而不是一个单一的pkt。

如果你想逐个访问序列化的数据包字节,只需要序列化str(pkt)层以获得python(char/byte)-string。

for b in str(pkt): 
    print "char: %s ord/value: %d hex: %x"%(b,ord(b),ord(b)) 
+0

'hexdump'给了我我需要的东西,但是如何才能轻松地访问数据包Bytes?像'firstByteOfPacket = packet [0]'?.我目前正在试图通过'packetByteArray = bytearray(repr(str(packet)))'来实现这一点,然后'firstByteOfPacket = packetByteArray [0]'希望接收数据包的第一个字节。然而,这给了我一些显然不是第一字节的东西,正如我从'hexdump'中看到的那样。我会在我的问题中添加一个示例。 – vicco

+0

查看更新的答案。只需要序列化层/数据包并访问任何字节作为str(pkt)[1]'来获取ascii char或'ord(str(pkt)[1])'来获取值。其他的一切都只是一个代表性的问题。 – tintin

+0

是的,这就是我所需要的。 – vicco