在多个pcap上使用pynids
我正在尝试使用pynids库解析多个pcap文件,但只能解析第一个文件。 我看到在libnids中有一个函数nids_unregister_tcp
,会有帮助吗? 尽管如此,我无法在pynids中找到该功能。
import nids
def handle_tcp_stream(tcp):
print "In handle_tcp_stream"
def extract(pcap_file):
nids.param("tcp_workarounds", 1)
nids.param("pcap_filter", "tcp") # bpf restrict to TCP only, note
nids.param("scan_num_hosts", 0) # disable portscan detection
nids.chksum_ctl([('0.0.0.0/0', False)]) # disable checksumming
nids.param("filename", pcap_file)
nids.init()
nids.register_tcp(handle_tcp_stream)
try:
nids.run()
except Exception, e:
print "Exception ", pcap_file + " ", e
def main():
extract("a.pcap")
print "Done"
extract("a.pcap")
if __name__ == "__main__":
main()
这是输出:
In handle_tcp_stream
In handle_tcp_stream
In handle_tcp_stream
In handle_tcp_stream
Done
看起来绑定写入不正确。
Perl的对手在过去也有这个问题:https://rt.cpan.org/Public/Bug/Display.html?id = 51107
基本上可以归纳为:
...一旦run()完成,libnids将清除并删除它的回调。
这个错误似乎在这里https://github.com/MITRECND/pynids/blob/master/nidsmodule.c#L533
我可能弄错了,但else
错误会让它错过实际注册的时间,因为之前定义了一个FP
。 那else
的身体应该始终被执行。 所以一个快速解决方案是:
https://github.com/soulseekah/pynids/commit/8d420e88dbdc340f309db9db7c3b9c2508b1cb80
我的Python API有点生疏,但我认为PyObject_Del
应该是Py_DECREF
。 尽管它也适用于删除。
观看https://github.com/MITRECND/pynids/pull/2了解更多发展情况,我相信他们会找出更正确的解决方法。 同时,我所做的工作应该暂时保持良好状态。
太糟糕了,没有任何单元测试,看看是否一切正常。
链接地址: http://www.djcxy.com/p/75727.html