我需要使用Python从TCP流套接字读取完整的(原始)IP帧。基本上我想要一个未经修改的框架,就好像它是从物理线上掉下来的,包括所有的头信息。
我一直在研究Python中的原始套接字,但我遇到了一些问题。我不需要自己创建数据包,我只需要逐字阅读和转发它们。
那么,如何从现有的TCP套接字(在Python中)读取整个IP框架(包括标题)?
最好我只想使用标准库。另外,我在Linux主机上。
谢谢!
答案 0 :(得分:3)
如果您不介意使用不属于标准库的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
在不同的线程或进程中运行嗅探,并且如果您希望它永远运行,则将收到的数据包粘贴在队列中。只需确保将str(pkt)放在队列中。我已经看到在multiprocessing.Queue
s上放入scapy数据包时会发生奇怪的事情。
Debian和Ubuntu都在他们的apt资源库中安装了Scapy。我不知道rpm发行版。从源代码安装非常简单:./setup.py install
。
答案 1 :(得分:0)
您应该尝试scapy。
答案 2 :(得分:0)
也许pylibpcap可以做到这一点。