尝试创建一个脚本,以 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 行上,因为如果我删除它,我不会收到相同的错误。
答案 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'