为什么我收到以下错误:“struct.error: required argument is not an integer”

时间:2021-02-12 22:02:44

标签: python-3.x scapy kali-linux

尝试创建一个脚本,以 100 毫秒的间隔无限期发送信标帧。我在其他包含较少 Dot11Elt 子层的脚本上很幸运,但由于某种原因,它不喜欢此脚本中的相同“sendp”命令。

    ht_caps = Dot11Elt(ID='HTCapabilities', info=(b"\x2c\x19\x03\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"))

当我尝试执行时,收到以下错误:

           File "/usr/lib/python3/dist-packages/scapy/fields.py", line 151, in addfield
      return s + self.struct.pack(self.i2m(pkt, val))
  struct.error: required argument is not an integer

有什么想法吗?

编辑:看起来好像问题出在 ht_caps 行上,因为如果我删除它,我不会收到相同的错误。

1 个答案:

答案 0 :(得分:0)

问题在于这一行:

tim = Dot11Elt(ID='TIM', len=(b"\x04"), info=(b"\x00\x02\x01\x00"))

您需要将长度作为整数传递:

>>> tim = Dot11Elt(ID='TIM', len=4, info=(b"\x00\x02\x01\x00"))
>>> bytes(tim)
b'\x05\x04\x00\x02\x01\x00'

您也可以不传递长度,因为 Scapy 会自动重新计算它:

>>> tim = Dot11Elt(ID='TIM', info=(b"\x00\x02\x01\x00"))
>>> raw(tim)
b'\x05\x04\x00\x02\x01\x00'