我正在用python编写一个工具(平台是linux),其中一个任务是捕获一个活动的tcp流,并
对每行应用一个函数。目前我正在使用
import subprocess
proc = subprocess.Popen(['sudo','tcpflow', '-C', '-i', interface, '-p', 'src', 'host', ip],stdout=subprocess.PIPE)
for line in iter(proc.stdout.readline,''):
do_something(line)
这非常有效(使用/etc/sudoers中的适当条目),但我希望避免调用外部程序。
到目前为止,我已经研究了以下可能性:
flowgrep:一个python工具,看起来和我需要的一样,但是:它使用pynids
在内部,它已经有7年的历史了,似乎已经被遗弃了。没有pynids包
对于我的gentoo系统,它附带了libnids的补丁版本
如果不进一步调整我就无法编译。
scapy:这是一个针对python的包操作程序/库,
我不确定TCP流是否
支持重新组装。
pypcap或pylibpcap作为libpcap的包装。同样,libpcap用于数据包
捕获,在我需要流重新组装的地方,根据
至this question。
在深入研究这些图书馆之前,我想知道是否有人
有一个有效的代码片段(这似乎是一个相当常见的问题)。我也很感激如果
有人可以就正确的道路提出建议。
谢谢
最佳答案
Jon Oberheide领导了维护Pynids的工作,这是最新的:
http://jon.oberheide.org/pynids/
因此,这可能允许您进一步探索flowgrep。pynids本身处理流重建相当优雅。有关一些好的示例,请参见http://monkey.org/~jose/presentations/pysniff04.d/。