我正在使用F5網絡Big-IP產品,它們爲調試目的而附加了自定義以太網II預告片幀。我試圖與Scapy綁定這個預告片的新圖層,但我無法這樣做。Scapy - 如何解剖以太網拖車字段
我可以在填充字段中看到感興趣的有效載荷,但是使用bind_layers不會執行所需填充部分的適當解析。
class MyEthTrailer(Packet):
name = "Ethernet Trailer"
fields_desc = [ ####Fields Mapping Section ]
def dissect(self, s):
self.payl,self.pad = self.extract_padding(s)
s = self.do_dissect(self.pad)
一個解決方案,我的想法是創建一個新的以太網替換類(或過載),我可以再指的是典型的以太網淨荷和我的新預告片。但我不是一個超級Python/scapy程序員,我不確定這是否是最好的選擇。
這是我應用bind_layers(TCP,MyEthTrailer)之後Scapy如何映射數據包的方式。我應該解析的信息是在填充類
<Ether dst=00:00:00:00:00:00 src=00:00:00:00:00:01 type=0x8100 |<Dot1Q prio=0L id=0L vlan=01L type=0x800 |<IP version=4L ihl=5L tos=0x0 len=67 id=1 flags=DF frag=0L ttl=255 proto=tcp chksum=0x01 src=10.0.0.1 dst=10.0.1.1 options=[] |<TCP sport=1111 dport=https seq=1 ack=1 dataofs=5L reserved=0L flags=PA window=4380 chksum=0xb718 urgptr=0 options=[] |<MyEthTrailer |<Padding load='\xPayload of MyEtherTrailer' |>>>>>>
[UPDATE-1]
我可以通過調用的力進行解碼的TCP SYN分組:
packet[TCP].decode_payload_as(MyEthTrailer)
然而,bind_layers方法,似乎不能自動工作,並且這對於更復雜的數據包不起作用,因爲它將TCP Padding與MyEthTrailer負載混合在一起。
[更新2]
我得到它的工作的一部分,但每個數據包需要正確地鑄造,然後我可以讀取拖車的有效載荷,並對其進行解碼。例如,如果一個數據包是TCP/DNS/MyEthTrailer,這將起作用。如果我不知道它是DNS,但它沒有正確設置,它仍然在TCP有效載荷和填充中混合。
您的幫助表示讚賞。
F5插件源代碼位於:https://devcentral.f5.com/wiki/AdvDesignConfig.F5WiresharkPlugin.ashx。希望這會幫助你隔離。 –