2013-11-21 15 views
7

私はpynidsライブラリを使って複数のpcapファイルを解析しようとしていますが、最初のファイルだけを解析することができます。私はlibnidsに関数nids_unregister_tcpがあったのを見て、それは助けになるのだろうか?私はpynidsでその機能を見つけることができません。複数のpcapで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 

答えて

4

結合が、それはそうです間違って書かれています。

はPerlの対応も、過去にこの問題を持っていた:libnidsはクリーンアップと一度(実行そのコールバックを削除します)です...

https://rt.cpan.org/Public/Bug/Display.html?id=51107

を基本的にはによりまとめることができます が完了しました。

エラーがここにhttps://github.com/MITRECND/pynids/blob/master/nidsmodule.c#L533

私は誤解されることで同様のようですが、elseFPが先に定義されたとき、それは実際の登録を欠場あります。そのelseボディは常に実行されるべきです。だから、簡単な修正は次のとおりです。

https://github.com/soulseekah/pynids/commit/8d420e88dbdc340f309db9db7c3b9c2508b1cb80

私は、PythonのAPIに少しさびたんだけど、私はPyObject_Del代わりPy_DECREFであるべきだと思います。削除と同様に動作しますが。

さらに進化していくためにhttps://github.com/MITRECND/pynids/pull/2を見ると、これを修正する正しい方法が見つかるはずです。その間、私がしたことは当分の間うまくいくはずです。

すべてが良いかどうかを確認するための単体テストはありません。

+0

ありがとうございました。何らかの理由で、ここで提供されている0.6.1バージョンでクイックフィックスが動作しないようです:https://oberheide.org/pynids/しかし、githubのコードはうまくいきます。 – Phani

+0

@Phani、私は両方のパッチをテストし、両方とも正常に動作しました。 'ndismodule.c'ファイルにパッチを当てて、' python setup.py install'を実行しましたか? libパスからライブラリを完全に削除して再インストールしてください。正常に動作するはずです。 – soulseekah

関連する問題