Scapy --TypeError: unbound 方法 copy() 必须以 UDP 实例作为第一个参数调用

Posted

技术标签:

【中文标题】Scapy --TypeError: unbound 方法 copy() 必须以 UDP 实例作为第一个参数调用【英文标题】:Scapy --TypeError: unbound method copy() must be called with UDP instance as first argument 【发布时间】:2019-04-13 14:59:34 【问题描述】:

我正在编写一个 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) )

Traceback(最近一次调用最后一次):

文件“EthCfgRx_Test_3.py”,第 20 行,在 UDP(sport=31123, dport=31123, chksum=0x6f21, len=30) / Raw(load=Payload) )

文件“/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 in Six.iteritems(fields)

文件“/home/watouser/.local/lib/python2.7/site-packages/scapy/packet.py”,第 382 行,在 对于 fname, fval in Six.iteritems(fields)

文件“/home/watouser/.local/lib/python2.7/site-packages/scapy/packet.py”,第 377 行,位于 copy_field_value return self.get_field(fieldname).do_copy(value)

文件“/home/watouser/.local/lib/python2.7/site-packages/scapy/fields.py”,第 86 行,在 do_copy 返回 x.copy()

TypeError: unbound 方法 copy() 必须以 UDP 实例作为第一个参数调用(什么都没有)

有什么建议吗?

提前致谢!

【问题讨论】:

【参考方案1】:

Scapy 会自动绑定数据包。

错误的部分似乎是Proto=UDP。 Proto 应该是一个数字,而不是一个类。

/操作时会自动提供Proto,无需指定

【讨论】:

以上是关于Scapy --TypeError: unbound 方法 copy() 必须以 UDP 实例作为第一个参数调用的主要内容,如果未能解决你的问题,请参考以下文章

window下安装scapy

Scapy的使用

Linux下scapy运行时报错:No module named scapy

python数据包之利器scapy详解!

scapy.srp 不给所有客户

-之scapy