【问题标题】:Installing Scapy on Yosemite在优胜美地安装 Scapy
【发布时间】:2015-11-10 16:56:26
【问题描述】:

我正在尝试在装有 OS Yosemite 的 Macbook pro 上运行 Scapy。

我是用下面的命令安装的

brew install scapy

一切看起来都不错,但是当我运行时

scapy

我收到此错误

Traceback (most recent call last):
File "/usr/local/bin/scapy", line 25, in <module>
interact()
File "/Library/Python/2.7/site-packages/scapy/main.py", line 278, in
interact
scapy_builtins = __import__("all",globals(),locals(),".").__dict__
File "/Library/Python/2.7/site-packages/scapy/all.py", line 25, in   <module>
from route import *
File "/Library/Python/2.7/site-packages/scapy/route.py", line 162, in <module>
conf.route=Route()
File "/Library/Python/2.7/site-packages/scapy/route.py", line 22, in __init__
self.resync()
File "/Library/Python/2.7/site-packages/scapy/route.py", line 31, in resync
self.routes = read_routes()
File "/Library/Python/2.7/site-packages/scapy/arch/unix.py", line 86, in read_routes
ifaddr = scapy.arch.get_if_addr(netif)
File "/Library/Python/2.7/site-packages/scapy/arch/__init__.py", line 36, in get_if_addr
return socket.inet_ntoa(get_if_raw_addr(iff))
File "/Library/Python/2.7/site-packages/scapy/arch/pcapdnet.py", line 201, in get_if_raw_addr
return i.get(ifname)["addr"].data
File "dnet.pyx", line 990, in dnet.intf.get
OSError: Device not configured`

我该如何解决?

编辑:如果我运行

sudo scapy 

我明白了:

Traceback (most recent call last):
File "/usr/local/bin/scapy", line 25, in <module>
interact()
File "/Library/Python/2.7/site-packages/scapy/main.py", line 278, in interact
scapy_builtins = __import__("all",globals(),locals(),".").__dict__
File "/Library/Python/2.7/site-packages/scapy/all.py", line 25, in <module>
from route import *
File "/Library/Python/2.7/site-packages/scapy/route.py", line 162, in <module>
conf.route=Route()
File "/Library/Python/2.7/site-packages/scapy/route.py", line 22, in __init__
self.resync()
File "/Library/Python/2.7/site-packages/scapy/route.py", line 31, in resync
self.routes = read_routes()
File "/Library/Python/2.7/site-packages/scapy/arch/unix.py", line 86, in read_routes
ifaddr = scapy.arch.get_if_addr(netif)
File "/Library/Python/2.7/site-packages/scapy/arch/__init__.py", line 36, in get_if_addr
return socket.inet_ntoa(get_if_raw_addr(iff))
File "/Library/Python/2.7/site-packages/scapy/arch/pcapdnet.py", line 201, in get_if_raw_addr
return i.get(ifname)["addr"].data
KeyError: 'addr'

【问题讨论】:

标签: python python-2.7 homebrew osx-yosemite scapy


【解决方案1】:

您的问题是known bug。在他们解决问题之前,您可以试试这个:

在文件scapy/arch/unix.py 中添加elif scapy.arch.DARWIN: 部分:

def read_routes():
    if scapy.arch.SOLARIS:
        f=os.popen("netstat -rvn") # -f inet
    elif scapy.arch.FREEBSD:
        f=os.popen("netstat -rnW") # -W to handle long interface names
    elif scapy.arch.DARWIN:
        f = os.popen("netstat -rn | grep -v vboxnet")  # Fix OSX problem            
    else:
        f=os.popen("netstat -rn") # -f inet
    ok = 0
    mtu_present = False

如果您找不到可以运行的 scapy 位置

python -v
>>> import scapy
import scapy # directory /Library/Python/2.7/site-packages/scapy

Reference

【讨论】:

    【解决方案2】:

    我遇到了与“addr”键错误完全相同的问题并解决了(您的第一个错误将是权限 - 所以是的,您需要 sudo)。

    通过编辑底层 Python 代码以获取一些调试信息,我可以看到正在检查的接口上没有设置 IP 地址,但是操作系统有一个(旧/手动)静态路由,它使用了这个未配置的接口。

    当 dnet 加载/导入时,它会遍历路由,然后检查接口以获取 IP(因为我不再使用它,所以它无法获取 IP,因此它没有 IP)。

    删除了静态路由,它工作正常。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-07-29
      • 2014-12-21
      • 1970-01-01
      • 1970-01-01
      • 2015-06-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多