如何在Python中重组TCP数据包?

时间:2011-03-07 05:53:54

标签: python tcp packet

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

谢谢! : - )

2 个答案:

答案 0 :(得分:13)

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

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

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

答案 1 :(得分:4)

是的... 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