python - 使用配置包的 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
解决方案
推荐阅读
- javascript - 仅路径下的 SVG 填充区域
- intellij-idea - 如何在 JetBrains IDE 中查看多个文件观察器的输出
- node.js - 如何从另一个部署 Alexa Skill 的处理程序调用处理程序?
- javascript - 搜索对象数组以匹配来自 mongodb 的 objectId
- php - 使用 jquery 多图像选择和打印选定的图像
- c# - PHP RSA公共加密不匹配C#加密
- google-dfp - 无法在 Google Ad Manager 中添加新用户(例如:DFP)
- java - JavaFX 13:列表视图在打开和关闭新窗口后不更新项目
- c# - 可以在 C# 中使用 SQL AND 语句来引用多个 C# 变量吗?如果是这样,怎么做?
- java - Java JSONObject.getJSONArray 总是返回 null