使用dpkt进行python网络数据包分析

时间:2014-04-17 18:22:17

标签: python pcap

我试图在python中使用tcpdump库分析dpkt捕获的SCTP * .pcap文件。

我能够获得SCTP通用标头,块标头。在块标题之后,我得到了chunk.data,无法使用该库进行解析。 (我浏览了源代码)。

但是我只需要chunk.data的前4个字节。 chunk.data的类型是字符串。所以我想,如果我能获得前4个字符,我可以获得前4个字节(因为字符的大小是1个字节)。之后,我需要使用socket.ntohl()将这4个字节转换为主机字节顺序。但是,我需要将4个字符的字符串转换为无符号整数,作为socket.ntohl()函数的输入,我不知道该怎么做。

我尝试使用ascii代码。

data=chunk.data
x=data[:4]
i= ntohl(int(''.join(str(ord(c)) for c in x)))

显示错误:

i= ntohl(int(''.join(str(ord(c)) for c in x)))
OverflowError: long int too large to convert

我尝试了x="efgh"。但ascii值不会生成4字节无符号整数。 (101102103104> 4294967295)所以我认为ascii值不适合在这里使用。

谁能告诉我该怎么做?

1 个答案:

答案 0 :(得分:0)

感谢@BSH this answer

我添加了

from struct import unpack

对于我所需的输出,这对我来说很好。

i=ntohl(unpack('<I',chunk.data[:4])[0])

struct.unpack用于将字符串解释为压缩二进制数据。