2013-11-21 3 views
7

Ich versuche, mehrere PKAP-Dateien mit der Pynids-Bibliothek zu analysieren, kann aber nur die erste Datei analysieren. Ich sah, dass es eine Funktion nids_unregister_tcp in libnids gab, wird das helfen? Ich kann diese Funktion jedoch nicht in pynids finden.Verwenden von Pynids auf mehrere Pcaps

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() 

Hier ist der Ausgang:

In handle_tcp_stream 
In handle_tcp_stream 
In handle_tcp_stream 
In handle_tcp_stream 
Done 

Antwort

4

Die Bindung falsch geschrieben ist, wie es scheint.

Das hatte Perl Pendant auch dieses Problem in der Vergangenheit hat: https://rt.cpan.org/Public/Bug/Display.html?id=51107

Grundsätzlich kann es durch zusammengefasst werden:

ist

... libnids reinigt und entfernt sein Rückruf einmal ausgeführt() beendet.

Der Fehler scheint hier https://github.com/MITRECND/pynids/blob/master/nidsmodule.c#L533

ähnlich zu sein, ich verwechselt werden können, aber die else es macht es die eigentliche Registrierung verpassen, wenn ein FP früher definiert wurde. Dieser else Körper sollte immer ausgeführt werden. So eine schnelle Lösung ist:

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

Ich bin ein bisschen rostig auf meinem Python-API, aber ich denke, dass PyObject_DelPy_DECREF stattdessen sein sollte. Obwohl es auch mit Löschen funktioniert.

Watch https://github.com/MITRECND/pynids/pull/2 für weitere Entwicklungen, ich bin sicher, dass sie einen richtigen Weg finden, um dies zu beheben. In der Zwischenzeit sollte das, was ich tat, vorerst gut funktionieren.

Schade, es gibt keine Unit-Tests, um zu sehen, ob alles in Ordnung ist.

+0

Vielen Dank für die Arbeit daran. Aus irgendeinem Grund scheint die Schnellkorrektur nicht auf der Version 0.6.1 zu funktionieren, die hier verfügbar ist: https://oberheide.org/pynids/ Aber der Code auf Ihrem GitHub funktioniert gut. – Phani

+0

@Phani, habe ich den Patch auf beiden getestet und beide funktionierten gut. Hast du die 'ndismodule.c' Datei gepatcht und dann' python setup.py install' darauf ausgeführt? Versuchen Sie, die Bibliothek vollständig aus dem lib-Pfad zu entfernen und neu zu installieren, sollte funktionieren. – soulseekah

Verwandte Themen