TCP包段python

时间:2013-11-13 05:29:50

标签: python sockets tcp

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

1 个答案:

答案 0 :(得分:0)

您可以将数据包解析为:

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

EG。 TCP连接数据包来自:eth_header+IP_header+TCP_Header+payload(data)    每个标头都有自己的特定长度,从标头中提取信息需要你在python中使用struct模块(参见struct.unpack(“”,“”))。提取标题信息也需要了解标题的结构。最后,您可以计算有效载荷位置并最终提取它。

具体而言,请参阅此link以获取更多信息。希望这有帮助