使用RadioTap时在Scapy 3.0中出现错误,在Scapy 2.4中可以正常工作

时间:2018-09-20 00:43:06

标签: python scapy

我只是想在scapy中创建一个以例如

开头的数据包

packet = RadioTap()/Dot11()/Dot11ACK()

packet.show()给了我这个错误。 没有RadioTap字段,我将无法发送任何数据包。

###[ RadioTap dummy ]###

      version   = 0
      pad       = 0
      len       = None
      present   =
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/scapy/packet.py", line 851, in show
    if isinstance(f, ConditionalField) and not f._evalcond(self):
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/scapy/fields.py", line 144, in _evalcond
    return self.cond(pkt)
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/scapy/layers/dot11.py", line 130, in <lambda>
    ConditionalField(LELongField('tsft', 0), lambda pkt: pkt.getdictval('present')['TSFT']),
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/scapy/packet.py", line 186, in getdictval
    return fld.i2dict(self, v)
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/scapy/fields.py", line 919, in i2dict
    if x & 1:
TypeError: unsupported operand type(s) for &: 'NoneType' and 'int'

1 个答案:

答案 0 :(得分:1)

还没有“ Scapy版本3.0”之类的东西。已经存在Scapy的分支,最初被其作者滥用为“ Scapy3k”或“ Scapy for Python3”(导致许多混乱,如您所见)。经过Scapy的维护者,Kamene的作者与一些发行商的维护者之间的无休止的交谈之后,它最近终于被重新命名为“ Kamene”。

因此您在此处使用Python 3的代码可能不是Scapy,而是Kamene。需要明确的是,当您迁移到Kamene并认为自己正在升级Scapy时,实际上已经切换到与实际Scapy相比只能进行有限数量的升级(错误修复,新功能)的软件。

Scapy的相同代码库适用于Python 2.7和3.x。因此,通过升级到Scapy 2.4.0版,您应该可以在两个Python版本上运行代码(并希望获得相同的结果)。如果没有得到相同的结果,请open an issue