【问题标题】:scapy: error sending packetsscapy:发送数据包时出错
【发布时间】:2015-04-26 14:33:56
【问题描述】:

我是 scapy 的新手,我正在学习一些在线教程,但我遇到了这个问题。我可以通过有线连接发送数据包,但是当我尝试使用无线连接时,我遇到了这个错误。我尝试搜索谷歌,但它没有帮助。我希望能找到解决办法。提前致谢。

我使用的是 windows 8.1,python 2.7

>>> p=IP(dst="192.168.1.1")/ICMP()
>>> sr1(p)
Begin emission:
ERROR: --- Error sending packets
Traceback (most recent call last):
  File "c:\Python27\lib\site-packages\scapy\arch\windows\__init__.py", line 374,
 in sndrcv
    pks.send(p)
  File "c:\Python27\lib\site-packages\scapy\arch\pcapdnet.py", line 257, in send

    sx = str(cls()/x)
  File "c:\Python27\lib\site-packages\scapy\packet.py", line 268, in __str__
    return self.build()
  File "c:\Python27\lib\site-packages\scapy\packet.py", line 330, in build
    p = self.do_build()
  File "c:\Python27\lib\site-packages\scapy\packet.py", line 319, in do_build
    pkt = self.self_build()
  File "c:\Python27\lib\site-packages\scapy\packet.py", line 310, in self_build
    p = f.addfield(self, p, val)
  File "c:\Python27\lib\site-packages\scapy\fields.py", line 70, in addfield
    return s+struct.pack(self.fmt, self.i2m(pkt,val))
  File "c:\Python27\lib\site-packages\scapy\layers\l2.py", line 95, in i2m
    return MACField.i2m(self, pkt, self.i2h(pkt, x))
  File "c:\Python27\lib\site-packages\scapy\layers\l2.py", line 89, in i2h
    x = conf.neighbor.resolve(pkt,pkt.payload)
  File "c:\Python27\lib\site-packages\scapy\layers\l2.py", line 38, in resolve
    return self.resolvers[k](l2inst,l3inst)
  File "c:\Python27\lib\site-packages\scapy\layers\inet.py", line 732, in <lambd
a>
    conf.neighbor.register_l3(Ether, IP, lambda l2,l3: getmacbyip(l3.dst))
  File "c:\Python27\lib\site-packages\scapy\arch\windows\__init__.py", line 292,
 in getmacbyip
    ifip = str(pcapdnet.dnet.intf().get(iff)['addr'])
KeyError: 'addr'
INFO: --- Error sending packets
.........................
Received 25 packets, got 0 answers, remaining 1 packets
WARNING: __del__: don't know how to close the file descriptor. Bugs ahead ! Plea
se report this bug.

【问题讨论】:

  • 尝试以管理员身份运行 cmd

标签: python scapy


【解决方案1】:

有点晚了,但是:

几个月前我遇到了同样的问题,最终对我有用的是通过另一个网络接口隧道 WiFi。看来问题出在IP获取过程中;也许您应该尝试以管理员身份运行,并设置 Python 和 Scapy 文件的功能,以便它们具有完全控制权(右键单击->属性->安全性)。

您在使用 send/sr/srp 等其他方法时是否遇到同样的问题?

【讨论】:

  • 感谢您的评论。我尝试将权限更改为完全控制,但这没有帮助。问题在于函数 getmacbyip()。我稍微更改了该功能,之后它开始发送数据包,但 MAC 地址未解析且数据包未传递。
  • srp 有效吗?那是个谜……当您使用 srp 时,您是否将其构建为 Ether/IP?因为就我而言,srp 不适用于第 3 层协议。
  • 我发送这个数据包来解析网络上系统的mac地址:>>>srp1(Ether(dst=ETHER_BROADCAST)/ARP(op="who-has", pdst="192.168. 1.38"),type=ETH_P_ARP,iface="eth0",timeout=2,chainCC=0,nofilter=1)。真的很奇怪,数据包被发送,但在超时时间内没有得到回复。这就是为什么 getmacbyip() 函数也失败了
  • 所以只是为了弄清楚:你可以发送ARP但没有得到响应,但你根本不能发送IP?
  • 是的。如果有帮助,请提供另一条信息:我尝试发送此数据包 20-30 次,但收到 2 次响应。
【解决方案2】:

我找到了解决方案;}

只需编辑 c:\Python27\lib\site-packages\scapy\arch\windows__init__.py 像这样:

  1. 删除 c:\Python27\lib\site-packages\scapy\arch\windows__init__.pyc
  2. 将行 get(iff)['addr']) 更改为 get(iff)['link_addr'])

【讨论】:

  • 我之前尝试过,但我得到另一个错误,说 scapy 无法解析目标的 mac 地址
【解决方案3】:

如果其他人在解决 MAC 之前遇到 getmacbyip() 超时问题,这里有一个有效的创可贴修复:

mac = None
while not mac:
    mac = getmacbyip(ipaddr)

getmacbyip() 如果无法解析,将返回 None。这有效,但仍需要几秒钟。我希望这不是让它工作的必要条件。

【讨论】:

    【解决方案4】:

    我已将我的 scapy 更新为开发版本 (https://github.com/secdev/scapy/),然后它就可以正常工作了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-03-24
      • 2021-03-19
      • 2014-04-20
      • 2013-12-09
      • 1970-01-01
      • 2015-08-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多