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

7 投票
2 回答
9543 浏览
提问于 2025-04-16 13:08

在Python中,如何重新组装TCP数据包?有没有现成的工具可以用?

谢谢!:-)

2 个回答

5

没错,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

14

要进行TCP重组,你需要使用一些工具,比如pynids,链接在这里:http://jon.oberheide.org/pynids/

你也可以自己动手用pylibpcap、dpkt或者scapy来构建一个。

不过,TCP重组其实很复杂,有很多特殊情况。如果你需要一个稳定可靠的解决方案,我不建议你自己去做。

撰写回答