Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Python中从TCP套接字读取完整的IP帧?_Python_Linux_Sockets_Raw Sockets - Fatal编程技术网

如何在Python中从TCP套接字读取完整的IP帧?

如何在Python中从TCP套接字读取完整的IP帧?,python,linux,sockets,raw-sockets,Python,Linux,Sockets,Raw Sockets,我需要使用Python从TCP流套接字读取完整(原始)IP帧。从本质上说,我想要一个未修改的帧,就像它脱离物理行一样,包括所有的头信息 我一直在研究Python中的原始套接字,但遇到了一些问题。我不需要形成我自己的数据包,我只需要逐字阅读和转发它们 那么,如何从现有的TCP套接字(Python)读取整个IP帧(包括标头) 我最好只使用标准库。另外,我在Linux主机上 谢谢 您应该试试。也许可以做到。如果您不介意使用,它不是标准库的一部分,并且不需要超高速,您可以使用它的嗅探功能。它需要回调。比

我需要使用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服务器中,套接字是在网络服务器上的层上创建的。它接收到的所有数据都已被操作系统从较低层剥离。获取它们的唯一方法是嗅探原始数据包,自己(或通过某个库)确定类型/端口和其他高层语义。谢谢你的提示!