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

Tia*_* Li 6 python tcp packet

如何在Python中重组TCP数据包?有没有现成的工具?

谢谢!:-)

小智 13

要执行TCP重组,您需要使用像pynids http://jon.oberheide.org/pynids/这样的东西.

您也可以使用pylibpcap,dpkt或scapy构建自己的.

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


Raf*_*ira 5

是的... TCP 协议保证应用层只会看到按顺序组装的数据包。现在,如果您正在谈论构建一些解析 IP 数据包本身的低级接口,您可以使用RAW 套接字来尝试它,这应该可以让您访问 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)
Run Code Online (Sandbox Code Playgroud)

无耻地从 python 套接字模块文档中摘取: http://docs.python.org/library/socket.html