首页 > 解决方案 > 使用配置包的 Scapy Dissector

问题描述

我正在尝试使用列出数据包中字段数的配置包来剖析 Scapy 中的数据包。但是,我无法在 Scapy 中找到可用于正确剖析所有字段的条件字段。

    ConfigData = [1,3,2,3,1,2,3,1,2,3]
    name = "Data"
    index = 0
    fields_desc = [FlagsField("Phasor_Flags", 0, 16, ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13","14", "15", "16"])]
    fields_desc.append(XShortField("voltage#1", None))
    fields_desc.append(XShortField("angle#1", None))
    fields_desc.append(XShortField("devation", None))
    fields_desc.append(XShortField("freqency", None))


    def pre_dissect(self, s):
        self.fields_desc.clear()
        self.fields_desc.append(FlagsField("Flags", 0, 16,
                                           ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14",
                                            "15","16"]))
        for i in range(Data.ConfigData[Data.index]):
            self.fields_desc.append(XShortField("voltage#"+str(i+1), None))
            self.fields_desc.append(XShortField("angle#"+str(i+1), None))
        self.fields_desc.append(XShortField("deviation", None))
        self.fields_desc.append(XShortField("frequency", None))
        Data.index += 1
        return s

    def extract_padding(self, s):
        print(self.fields)
        return '', s 

ConfigData应该来自其他配置数据包。我一直在尝试field_desc动态更改,但这似乎没有按预期工作。输出如下:

###[ Packet_Data ]### 
              \Stations  \
               |###[ Data ]### 
               |  Flags= 
               |  voltage#1 = 0xcdd
               |  angle#1 = 0xfaa2
               |  deviation = 0x0
               |  frequency = 0x0
               |###[ Data ]### 
               |  Phasor_Flags= 
               |  voltage#1 = 0xdc5
               |  angle#1 = 0xfb7e
               |  deviation = 0x0
               |  frequency= 0x0
               |###[ Data ]### 
               |  Phasor_Flags= 
               |  voltage#1 = 0xde6
               |  angle#1 = 0xfb23
               |  deviation = 0x0
               |  frequency= 0x0

部分的数量[ Data ]没有按预期动态更新。理论上,我希望输出看起来更像:

###[ Packet_Data ]### 
              \Stations  \
               |###[ Data ]### 
               |  Flags= 
               |  voltage#1 = 0xcdd
               |  angle#1 = 0xfaa2
               |  deviation = 0x0
               |  frequency = 0x0
               |###[ Data ]### 
               |  Phasor_Flags= 
               |  voltage#1 = 0xdc5
               |  angle#1 = 0xfb7e
               |  voltage#2 = 0xdc5
               |  angle#2 = 0xfb7e
               |  voltage#3 = 0xdc5
               |  angle#3 = 0xfb7e
               |  deviation = 0x0
               |  frequency= 0x0
               |###[ Data ]### 
               |  Phasor_Flags= 
               |  voltage#1 = 0xde6
               |  angle#1 = 0xfb23
               |  voltage#2 = 0xdc5
               |  angle#2 = 0xfb7e
               |  deviation = 0x0
               |  frequency= 0x0

标签: pythonnetworkingscapypacket-capture

解决方案


推荐阅读