私は F5 Networks Big-IP 製品を使用しています。これには、デバッグ用にカスタムの Ethernet II トレーラ フレームが追加されています。このトレーラー用に新しいレイヤーをバインドするために 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)
私が考えていた解決策の 1 つは、新しいイーサネット置換クラス (またはオーバーロードされたクラス) を作成することでした。これにより、通常のイーサネット ペイロードと新しいトレーラを参照できます。しかし、私は超 Python/scapy プログラマーではないので、これが最善の選択肢であるかどうかはわかりません。
これは、bind_layers(TCP,MyEthTrailer) を適用した後、Scapy が現在パケットをマップする方法です。解析する必要がある情報は Padding クラスにあります
<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' |>>>>>>
[更新-1]
次のように呼び出して、TCP SYN パケットを強制的にデコードできます。
packet[TCP].decode_payload_as(MyEthTrailer)
ただし、bind_layers メソッドは自動的には機能しないようです。これは、TCP パディングと MyEthTrailer ペイロードを混同しているため、より複雑なパケットでは機能しません。
[更新-2]
部分的に動作するようになりましたが、すべてのパケットを適切にキャストする必要があります。その後、トレーラー ペイロードを読み取ってデコードできます。たとえば、パケットが TCP/DNS/MyEthTrailer の場合、これは機能します。それが DNS だとわからず、適切に設定されていない場合でも、TCP ペイロードとパディングに混在しています。
あなたの助けに感謝します。