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

时间:2011-03-23 19:21:26

标签: python linux sockets raw-sockets

我需要使用Python从TCP流套接字读取完整的(原始)IP帧。基本上我想要一个未经修改的框架,就好像它是从物理线上掉下来的,包括所有的头信息。

我一直在研究Python中的原始套接字,但我遇到了一些问题。我不需要自己创建数据包,我只需要逐字阅读和转发它们。

那么,如何从现有的TCP套接字(在Python中)读取整个IP框架(包括标题)?

最好我只想使用标准库。另外,我在Linux主机上。

谢谢!

3 个答案:

答案 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可以做到这一点。