在 Yosemite 上安装 Scapy
Installing Scapy on Yosemite
我正在尝试 运行 Scapy 在我的 Macbook pro 上使用 OS Yosemite。
我是用下面的命令安装的
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'
我遇到了与 'addr' 键错误完全相同的问题并解决了(您的第一个错误将是权限 - 所以是的,您需要 sudo)。
通过编辑底层 Python 代码来获取一些调试信息,我可以看到正在检查的接口上没有设置 IP 地址,但是 OS 有一个 (old/manual ) 使用此未配置接口的静态路由。
当 dnet 是 loading/importing 时,它会遍历路由,然后检查接口以获取 IP(它不能这样做,因为我不再使用它,因此它没有 IP)。
删除了静态路由,它工作正常。
你的问题是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
我正在尝试 运行 Scapy 在我的 Macbook pro 上使用 OS Yosemite。
我是用下面的命令安装的
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'
我遇到了与 'addr' 键错误完全相同的问题并解决了(您的第一个错误将是权限 - 所以是的,您需要 sudo)。
通过编辑底层 Python 代码来获取一些调试信息,我可以看到正在检查的接口上没有设置 IP 地址,但是 OS 有一个 (old/manual ) 使用此未配置接口的静态路由。
当 dnet 是 loading/importing 时,它会遍历路由,然后检查接口以获取 IP(它不能这样做,因为我不再使用它,因此它没有 IP)。
删除了静态路由,它工作正常。
你的问题是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