2017-10-24 7 views
1

Ich möchte eine PTPv2-Ebene zu scapy (v2.3.3) in Python (v2.7) hinzufügen. Ich habe die ptpv2-Klasse mit den PTP-Einträgen zur Datei /scapy/layers/inet.py hinzugefügt (weil PTP auf Schicht 4 ist). Ich habe auch die ptpv2-Schicht an die obere Schicht gebunden, in meinem Fall an Ethernet.PTPv2-Layer zu scapy hinzufügen

bind_layers(Ethernet,ptpv2) 

Durch die scapy Befehl eingeben "ls()" die erstellte PTPv2 Schicht, ok, Erfolg aufgeführt. Aber durch die Ebene durch die Python-Befehle Zugriff auf

for packet in PcapReader('/media/sf_SharedFolder/test.pcap'): 
    if packet[ptpv2].sequenceId == anything: 
    # do sth 

der folgenden Fehler auftritt:

File "/usr/lib/python2.7/dist-packages/scapy/packet.py", line 817, in __getitem__ 
    raise IndexError("Layer [%s] not found" % lname) 
IndexError: Layer [ptpv2] not found 

Die Wireshark Datei, um die Schichten Rahmen hat -> Ethernet -> PTP, so meine Bindung Befehl hat das Recht sein .

Weiß nicht, wo der Fehler ist.

Pls, hilf mir!

Thx

Chris

Antwort

1

Ihr Dissektor wahrscheinlich versagt, aber scapy versteckt, dass und decodiert die Schicht als Raw().

Sie können:

  • prüfen, ob durch die Überprüfung, dass packet.payload eine Raw Instanz ist.
  • versuchen Sie zu finden, was in Ihrem Dissektor abstürzt, indem Sie conf.debug_dissector = True setzen.
+0

Ich habe "conf.debug_dissector = True" hinzugefügt. Der nächste Fehler tritt auf: Datei "/usr/lib/python2.7/dist-packages/scapy/fields.py", Zeile 75, in getfield Rückgabe s [self.sz:], self.m2i (pkt, struct. entpacken (self.fmt, s [: self.sz]) [0]) struct.error: unpack benötigt ein Stringargument der Länge 2 – crappidy

+0

Nein, sry, nur mehr Fehlerinformation über "conf.debug_dissector = True". Fehler ist weiterhin vorhanden. Ich habe meine Frage nicht zu einem anderen Thema bearbeitet, ich habe meine Frage zu weiteren Informationen bearbeitet. – crappidy

+0

Ok, dann stelle ich eine neue Frage. – crappidy