【问题标题】:How to reassemble TCP packets in Python?如何在 Python 中重组 TCP 数据包?
【发布时间】:2011-07-10 03:15:01
【问题描述】:

如何在 Python 中重组 TCP 数据包?有没有现成的工具?

谢谢! :-)

【问题讨论】:

  • 从什么数据源重组?
  • 需要更多细节才能获得准确的答案。

标签: python tcp packet


【解决方案1】:

要执行 TCP 重组,您需要使用类似 pynids http://jon.oberheide.org/pynids/ 的东西。

您也可以使用 pylibpcap、dpkt 或 scapy 构建自己的。

TCP 重组非常棘手,有很多边缘情况。如果您需要强大的解决方案,我不建议您自己做。

【讨论】:

    【解决方案2】:

    是的... TCP 协议保证应用层只会看到按顺序组装的数据包。现在,如果您正在讨论构建一些解析 IP 数据包本身的低级接口,您可以使用RAW sockets 尝试一下,这应该可以让您访问 IP 标头信息。这是一个例子:

    import socket
    
    # the public network interface
    HOST = socket.gethostbyname(socket.gethostname())
    
    # create a raw socket and bind it to the public interface
    s = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket.IPPROTO_IP)
    s.bind((HOST, 0))
    
    # Include IP headers
    s.setsockopt(socket.IPPROTO_IP, socket.IP_HDRINCL, 1)
    
    # receive all packages
    s.ioctl(socket.SIO_RCVALL, socket.RCVALL_ON)
    
    # receive a package
    print s.recvfrom(65565)
    
    # disabled promiscuous mode
    s.ioctl(socket.SIO_RCVALL, socket.RCVALL_OFF)
    

    无耻地从 python 套接字模块文档中提取: http://docs.python.org/library/socket.html

    【讨论】:

      猜你喜欢
      • 2016-11-28
      • 2012-10-19
      • 2020-06-10
      • 1970-01-01
      • 2013-11-25
      • 2012-01-02
      • 2018-08-21
      • 2016-02-08
      • 2012-12-02
      相关资源
      最近更新 更多