我试图在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值不适合在这里使用。
谁能告诉我该怎么做?
答案 0 :(得分:0)
感谢@BSH this answer。
我添加了
from struct import unpack
对于我所需的输出,这对我来说很好。
i=ntohl(unpack('<I',chunk.data[:4])[0])
struct.unpack用于将字符串解释为压缩二进制数据。