2012-04-10 3 views
1

Ich habe einige Pakete mit pcap Bibliothek in c gefangen. Jetzt benutze ich Python-Programm, um diese gespeicherte Paketdatei zu lesen. aber ich habe ein problem hier. Ich habe eine Datei, die zuerst pkthdr (von Lybrary zur Verfügung gestellt) und dann das eigentliche Paket. Format pkthdr is-Pccap Header Länge Feld mit Python lesen

struct pcap_pkthdr { 
    struct timeval ts; /* time stamp 32bit */ 32bit 
    bpf_u_int32 caplen; /* length of portion present */ 
    bpf_u_int32 len; /* length this packet (off wire) */ 
}; 

jetzt möchte ich das Feld len lesen, so ich habe timeval und Kappe len und gedruckt LEN-Feld mit Python in binärer Form .. der binäre Code übersprungen, die ich is- bekam 01001010 00000000 00000000 00000000 Nun, wie man es in u_int32 liest, ich denke nicht, dass es richtiger Wert (zu groß) ist, sollte tatsächliche len Feldwert 74 Byte sein (check in wireshark) .. also bitte sagen Sie mir, was ich falsch mache. danke im voraus

+0

Können Sie Ihren Python-Code posten? –

Antwort

0

Werfen Sie einen Blick auf die struct module, mit der Sie solche Binärdaten relativ einfach entpacken können, zum Beispiel:

struct.unpack('LLL', yourbuffer) 

Dies gibt Ihnen ein Tupel der drei (L = unsigned long) Werte. Wenn der len-Wert nicht richtig erscheint, unterscheidet sich die byte order der Datei von Ihrer nativen. In diesem Fall stellten Sie das Format-String mit entweder > (Big-Endian) oder < (Little-Endian):

struct.unpack('>LLL', yourbuffer) 
1

Oder einen Blick auf das pylibpcap Modul, das pypcap Modul oder das pcapy-Modul, das lassen Sie rufen einfach API-APIs relativ einfach auf. Auf diese Weise müssen Sie nicht Pflege über die Details der pcap-Dateien, und Ihr Code wird, mit libpcap 1.1 oder höher, auch in der Lage, zumindest einige der pcap-ng-Dateien, die Wireshark produzieren kann und dass es zu lesen wird standardmäßig in der 1.8-Version produzieren.

Das Schreiben Ihres eigenen Codes zum Lesen von pcap-Dateien, anstatt sich auf libpcap/WinPcap zu verlassen, ist selten sinnvoll. (Wireshark tut dies als Teil seiner Bibliothek, die eine Reihe von Capture-Dateiformaten liest und das pcap-ng-Format so unterstützt, wie es die aktuelle pcap-API nicht kann, aber die betreffende Bibliothek unterstützt auch pcap-ng ....)