我正在和scapy合作,有一个与scapy有关的问题,还有python。我尝试使用变量作为scapy字段名。下面是一段代码的摘录,它应该说明我尝试做什么(它不起作用):
class Test(Packet):
name = "Test23"
def __init__(self,foo=None):
self.foo=foo
fields_desc = [
BitField(self.foo, 0x0, 4),
BitField("bar", 0x3, 4)
]
现在我想问题是由于fields_desc是一个类属性而不是一个类变量。现在,我怎样才能达到我想要的?(设置的名称self.foo公司在运行时/类初始化时?)在
我很感激你的帮助。 谨致问候
编辑:附加一个计数器就足够了。我试过了:
^{pr2}$但似乎不起作用。如果你能给我指个正确的方向就好了,不知怎么的我迷路了。在
我猜你想做的是根据你用'getfield'解析的原始数据输入更改第一个位字段的名称?有点难说。。。在
无论如何,从函数
pre_dissect
可以查看原始数据并将字段附加到self.fields_desc如你所愿。使用pre_dissect时,请确保在未修改的函数末尾返回原始数据包数据。在在我的经验中,这样做很少是正确的,从长远来看,条件域和类重载通常会更好地工作。在
祝你好运
我认为类属性是在类构造函数运行之前初始化的,所以self.foo公司在创建字段“描述”时尚未分配。尝试将fields_desc声明为空数组,并在
__init__
函数中向其追加BitField对象。在我不知道您从中继承的Packet类是如何工作的,但是您可能还想看看super() function。在
编辑:也许你在找这样的东西?在
输出
^{pr2}$有关类变量here的详细信息
相关问题 更多 >
编程相关推荐