如何在Python中重组TCP数据包?有没有现成的工具?
谢谢! : - )
答案 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