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

7
如何在Python中重新组装TCP数据包?是否有现成的工具可以做到这一点?
谢谢! :-)

从哪个数据源重新组装? - jcomeau_ictx
需要更多的细节才能得到准确的答案。 - lunixbochs
2个回答

14

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

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

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


5

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

从Python套接字模块文档中无耻地抄袭而来: http://docs.python.org/library/socket.html

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接