Scapy如何剖析以太网拖车场

2024-06-16 13:07:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用的是F5 Networks Big IP产品,它们附加了一个定制的Ethernet II拖车帧,用于调试目的。我正试着和斯凯比为这个拖车绑定一个新的层,但我做不到。在

我可以在Padding字段中看到感兴趣的负载,但是使用bind_layers不能正确地剖析所需的Padding部分。在

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程序员,我不确定这是否是最好的选择。在

这就是Scapy在应用绑定层(TCP,MyEthTrailer)后映射我的包的方式。我应该分析的信息在Padding类中

^{pr2}$

[更新-1]

我可以通过调用以下命令强制解码TCP SYN数据包:

packet[TCP].decode_payload_as(MyEthTrailer)

但是,bind_layers方法似乎不能自动工作,而且它不能处理更复杂的数据包,因为它混淆了TCP填充和MyEthTrailer有效负载。在

[更新-2]

我让它部分工作,但每一个包都需要正确的铸造,然后我可以读取拖车有效载荷并解码。例如,如果一个数据包是TCP/DNS/MyEthTrailer,这将起作用。如果我不知道它是DNS,而且设置不正确,它仍然混合在TCP有效负载和填充中。在

感谢你的帮助。在


Tags: selfbinddnslayersf5解码数据包tcp
1条回答
网友
1楼 · 发布于 2024-06-16 13:07:53

我可以通过重载我的新自定义类myethtrainer的pre-_-dissect函数来实现这一点。我尝试解析最后一个有填充的层的有效负载,并验证它是否具有正确的长度。在

这是处理两件事:

第一部分解剖切片
class MyEthTrailer(Packet):
    def pre_dissect(self,s):
        verify_if_payload_is_mine_and_assign_fields()
第2部分人工力量有效载荷解码 ^{pr2}$

如果有人感兴趣,我会把整个解决方案发布到Github并在这里更新。在

相关问题 更多 >