我正在编写一个Python脚本,该脚本使用Scapy在第2层创建UDP数据包。
但是,当在数据包的定义中包含UDP()选项/属性时,我会不断收到“ TypeError”。
代码:
Return_Data = sendp( Ether(dst="ff:ff:ff:ff:ff:ff", type=0x800) \
/ IP(version=4L, ihl=5L, tos=0x0, len=64, \
id=0, flags=0, frag=0L, ttl=64, proto=UDP, \
chksum = 30495, src="xxx.xxx.xx.xxx", dst="xxx.xxx.x.x") / \
UDP(sport=31123, dport=31123, chksum=0x6f21, len=30) / Raw(load=Payload) )
回溯(最近通话最近一次):
文件“ EthCfgRx_Test_3.py”,第20行,在 UDP(sport = 31123,dport = 31123,chksum = 0x6f21,len = 30)/ Raw(load =有效载荷))
文件“ /home/watouser/.local/lib/python2.7/site-packages/scapy/packet.py”,第349行,位于 div 中 cloneB = other.copy()
文件“ /home/watouser/.local/lib/python2.7/site-packages/scapy/packet.py”,第200行,复制 clone.fields = self.copy_fields_dict(self.fields)
文件“ /home/watouser/.local/lib/python2.7/site-packages/scapy/packet.py”,行382,在copy_fields_dict中 表示fname,将fval替换为six.iteritems(fields)}
文件“ /home/watouser/.local/lib/python2.7/site-packages/scapy/packet.py”,行382,在 表示fname,将fval替换为six.iteritems(fields)}
文件“ /home/watouser/.local/lib/python2.7/site-packages/scapy/packet.py”,行377,在copy_field_value中 返回self.get_field(fieldname).do_copy(value)
文件“ /home/watouser/.local/lib/python2.7/site-packages/scapy/fields.py”,行86,在do_copy中 返回x.copy()
TypeError:必须以UDP实例作为第一个参数来调用未绑定方法copy()(而是什么也不要)
有什么建议吗?
预先感谢!
答案 0 :(得分:0)
Scapy将自动绑定数据包。
错误的部分似乎是Proto=UDP
。 Proto应该是数字,而不是课程。
进行/
操作时,将自动提供Proto,因此您无需指定它