[英]How to read complete IP frames from TCP socket in Python?
我需要使用Python从TCP流套接字读取完整的(原始)IP帧。 基本上我想要一个未经修改的框架,就好像它从物理线上掉下来一样,包括所有的头信息。
我一直在研究Python中的原始套接字,但我遇到了一些问题。 我不需要自己创建数据包,我只需要逐字阅读和转发它们。
那么,我如何从现有的TCP套接字(在Python中)读取整个IP框架(包括标题)?
我最好只使用标准库。 另外,我在Linux主机上。
谢谢!
如果您不介意使用不属于标准库的Scapy ,并且不要求超高速,则可以使用其sniff
功能。 需要回调。 就像是:
pkts_rxd = []
def process_and_send(pkt):
pkts_rxd.append(pkt)
sendp(pkt, 'eth1')
sniff(prn=process_and_send, iface='eth0', count=100)
您可以使用count=0
在不同的线程或进程中运行sniff,并且如果您希望它永远运行,则将收到的数据包粘贴在队列中。 只需确保将str(pkt)放在队列中。 我已经看到将scapy数据包放在multiprocessing.Queue
上时会发生奇怪的事情。
Debian和Ubuntu都在他们的apt资源库中安装了Scapy。 我不知道rpm发行版。 从源代码安装非常简单: ./setup.py install
。
你应该尝试scapy 。
也许pylibpcap可以做到这一点。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.