如何在Python中重新组装TCP数据包?是否有现成的工具可以做到这一点?
谢谢! :-)
谢谢! :-)
要执行TCP重组,您需要使用类似pynids http://jon.oberheide.org/pynids/的工具。
您也可以使用pylibpcap、dpkt或scapy构建自己的工具。
TCP重组非常棘手,有很多边缘情况。如果您需要一个强大的解决方案,我不建议您自己动手。
是的... TCP协议保证应用层只会看到已经组装并按顺序排列的数据包。如果你想要构建一些低层接口去解析IP数据包本身,可以尝试使用 原始套接字,这将为您提供对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)