如何在Python中从TCP套接字读取完整的IP帧?
我需要使用Python从TCP流套接字读取完整(原始)IP帧。从本质上说,我想要一个未修改的帧,就像它脱离物理行一样,包括所有的头信息 我一直在研究Python中的原始套接字,但遇到了一些问题。我不需要形成我自己的数据包,我只需要逐字阅读和转发它们 那么,如何从现有的TCP套接字(Python)读取整个IP帧(包括标头) 我最好只使用标准库。另外,我在Linux主机上 谢谢 您应该试试。也许可以做到。如果您不介意使用,它不是标准库的一部分,并且不需要超高速,您可以使用它的如何在Python中从TCP套接字读取完整的IP帧?,python,linux,sockets,raw-sockets,Python,Linux,Sockets,Raw Sockets,我需要使用Python从TCP流套接字读取完整(原始)IP帧。从本质上说,我想要一个未修改的帧,就像它脱离物理行一样,包括所有的头信息 我一直在研究Python中的原始套接字,但遇到了一些问题。我不需要形成我自己的数据包,我只需要逐字阅读和转发它们 那么,如何从现有的TCP套接字(Python)读取整个IP帧(包括标头) 我最好只使用标准库。另外,我在Linux主机上 谢谢 您应该试试。也许可以做到。如果您不介意使用,它不是标准库的一部分,并且不需要超高速,您可以使用它的嗅探功能。它需要回调。比
嗅探功能。它需要回调。比如:
pkts_rxd = []
def process_and_send(pkt):
pkts_rxd.append(pkt)
sendp(pkt, 'eth1')
sniff(prn=process_and_send, iface='eth0', count=100)
您可以在不同的线程或进程中运行sniff,使用count=0
,并将接收到的数据包粘贴到队列上,如果您希望它永远运行的话。只需确保将str(pkt)放在队列中。我见过在multiprocessing.Queue
s上放置scapy数据包时发生奇怪的事情
Debian和Ubuntu的apt存储库中都有Scapy。我不知道rpm发行版。从源代码安装非常容易:/setup.py install
您无法“从TCP套接字读取整个IP帧”(无论使用何种语言)。TCP套接字不提供对原始数据包的访问。您可能需要使用数据包嗅探接口。那么,如果我创建了一个TCP服务器,是否可以创建一个连接到TCP端口的原始套接字呢?无论哪种方式,我认为我将使用建议的包嗅探接口。原始套接字没有“端口”语义!在TCP服务器中,套接字是在网络服务器上的层上创建的。它接收到的所有数据都已被操作系统从较低层剥离。获取它们的唯一方法是嗅探原始数据包,自己(或通过某个库)确定类型/端口和其他高层语义。谢谢你的提示!