在linux上实时捕获数据包

时间:2013-12-12 22:53:56

标签: linux networking live capture packet

我想知道是否有可能实时捕获网络数据包并将其保存到变量中,例如在python中。 我需要一些信息才能从中获取,而不是将其保存到文件中。

我需要捕获http数据包并获取源地址及其内容(应该是一个HTML代码),以便仅从中提取文本,然后对该信息执行其余工作。 没有理由将每个数据包保存到文件中,因为整个过程会更慢。我找了很长时间才能做到这一点,但没有成功。 如果您知道任何可以帮助我做到这一点的工具,请写下来。

1 个答案:

答案 0 :(得分:2)

我确定您已经看过有关处理PCAP文件的库的this link。现在的问题是如何在不存储文件的情况下实时获取。

可能最容易使用fifo

$ mkfifo /tmp/tcpdump.fifo

现在,您可以捕获并将数据提供给指定的fifo

$ sudo tcpdump -s0 -i eth0 -f /tmp/tcpdump.fifo tcp port 80

在你的python程序中,你可以按照链接中的说明打开'/tmp/tcpdump.fifo'作为输入文件。

或者,您可以尝试在程序中打开'/ dev / stdin'并从那里读取数据;然后,您可以使用shell将PCAP数据直接传送到stdin并跳过名为fifo的中间件。

$ sudo tcpdump -s0 -i eth0 -f - tcp port 80 | ./youprogram.py