2

我正在处理 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 标头信息并仅从数据包中提取数据?谢谢

4

1 回答 1

1

您可以将数据包解析为:

  • 前 14 个字节是以太网标头
  • 接下来的 20 个字节可能是 ip header
  • 同样,从 ip 标头中,我们可以提取我们正在使用的协议,最后查看协议引用以从中解析数据

例如。TCP 连接数据包如下:eth_header+IP_header+TCP_Header+payload(data) 每个标头都有其特定的长度,从标头中提取信息需要您在 python 中使用结构模块(请参阅 struct.unpack("",""))。提取标头信息还需要了解标头的结构。最后,您可以计算有效载荷位置并最终提取它。

具体来说,请参阅此链接以获取更多信息。希望这可以帮助

于 2014-01-21T15:42:44.660 回答