我试图使用pynids库解析多个pcap,但是只能解析第一个文件。我看到libnids中有一个函数nids_unregister_tcp,这有帮助吗?不过,我在侏儒身上找不到这种功能。
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发布于 2013-11-30 14:34:29
装订似乎写得不对。
Perl的对应方过去也有过这样的问题:https://rt.cpan.org/Public/Bug/Display.html?id=51107。
它基本上可以概括为:
一旦运行()完成,...libnids就清理并删除它的回调。
在这里,https://github.com/MITRECND/pynids/blob/master/nidsmodule.c#L533的错误似乎是相似的
我可能弄错了,但是在前面定义了一个else时,那里的FP使它忽略了实际的注册。else主体应该始终被执行。因此,一个快速的解决办法是:
https://github.com/soulseekah/pynids/commit/8d420e88dbdc340f309db9db7c3b9c2508b1cb80
我对Python有点生疏,但我认为PyObject_Del应该是Py_DECREF。虽然它也适用于删除。
关注https://github.com/MITRECND/pynids/pull/2的更多发展,我相信他们会想出一个更正确的方法来解决这个问题。同时,我所做的一切暂时应该会很好。
糟糕的是,没有任何单元测试来检查是否一切正常。
https://stackoverflow.com/questions/20127131
复制相似问题