【发布时间】:2013-11-25 14:19:46
【问题描述】:
我正在处理 TCP 数据包。此应用程序充当嗅探器并构建 SIP 数据包。一些 TCP SIP 数据包碎片化,因此我需要重新组装它们。
我所做的是最初我使用以下方式处理第一个 TCP 连接:
packet = s.recvfrom(sipLocatorConfig.NETWORK_MAX_SIZE)
之后我获得数据,然后如果碎片化我得到其余的但使用.recv:
socket.recv(sipLocatorConfig.NETWORK_TCP_MAX_SIZE)
当我获得第二个片段时,我在使用.recv时得到了乱码,我假设是ETH,IP,TCP信息:
M*?
M*?@{
QyE
如何删除此 ETH、IP 和 TCP 标头信息并仅从数据包中提取数据? 谢谢
【问题讨论】:
-
旁注:你应该用十六进制打印你的garbeldy gook。对数据包数据使用
binascii.hexlify。 -
如果您知道它们占用了多少字节,您可以从数据中跳过该字节数。
-
由于我能使用该模块,现在我可以看到在HEX ETH,IP和TCP报头信息,0a4d2ac000030a4d2acf407b0800 4500033017bd40004006a9e8ac1f2e380c478f84 81b013c4c30e71fbc8d7d65b8018073c794500000101080a09e2e0c893db873e,从使用.recv接收的分组如何删除ETH,IP和TCP信息功能?类似这样的东西:binarytides.com/python-packet-sniffer-code-linux
-
字节可能因不同的数据包而异。
-
我能够通过将 socket.recv() 处理为字符串来获取有效负载数据。 socket.recvfrom() 返回一个元组。因此,我刚刚评论了 packet=packet[0] 行,现在可以完美运行。