如何在Python中重新组装TCP数据包?
在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重组其实很复杂,有很多特殊情况。如果你需要一个稳定可靠的解决方案,我不建议你自己去做。