【发布时间】:2011-07-10 03:15:01
【问题描述】:
如何在 Python 中重组 TCP 数据包?有没有现成的工具?
谢谢! :-)
【问题讨论】:
-
从什么数据源重组?
-
需要更多细节才能获得准确的答案。
如何在 Python 中重组 TCP 数据包?有没有现成的工具?
谢谢! :-)
【问题讨论】:
要执行 TCP 重组,您需要使用类似 pynids http://jon.oberheide.org/pynids/ 的东西。
您也可以使用 pylibpcap、dpkt 或 scapy 构建自己的。
TCP 重组非常棘手,有很多边缘情况。如果您需要强大的解决方案,我不建议您自己做。
【讨论】:
是的... 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
【讨论】: