Python Scapy在osx上安装失败,dnet导入错误
安装Scapy时遇到问题,需要依赖。我花了一些时间在谷歌上搜索解决方案,但所有“解决方案”似乎都会影响Python的旧版本,或者根本不起作用 脚本:Python Scapy在osx上安装失败,dnet导入错误,python,macos,installation,importerror,scapy,Python,Macos,Installation,Importerror,Scapy,安装Scapy时遇到问题,需要依赖。我花了一些时间在谷歌上搜索解决方案,但所有“解决方案”似乎都会影响Python的旧版本,或者根本不起作用 脚本: #!/usr/bin/python import threading import Queue import time from scapy.all import * class WorkerThread(threading.Thread) : def __init__(self, queue, tid) : thre
#!/usr/bin/python
import threading
import Queue
import time
from scapy.all import *
class WorkerThread(threading.Thread) :
def __init__(self, queue, tid) :
threading.Thread.__init__(self)
self.queue = queue
self.tid = tid
print 'Worker: %d' %self.tid
def run(self) :
total_ports = 0
while True :
port = 0
try :
port = self.queue.get(timeout=1)
except Queue.Empty :
print 'Worker %d exiting. %d ports scanned' %(self.tid, total_ports)
return
#Scanning begins
ip = sys.argv[1]
response = sr1(IP(dst=ip)/TCP(dport=port, flags='S'), verbose=False, timeout=.2)
if response :
if response[TCP].flags == 18 :
print 'ThreadID: %d: Got port no. %d status: OPEN' %(self.tid, port)
self.queue.task_done()
total_ports += 1
queue = Queue.Queue()
threads = []
for i in range(1, 10) :
print 'Creating WorkerThread : %d' %i
worker = WorkerThread(queue, i)
worker.setDaemon(True)
worker.start()
threads.append(worker)
print 'WorkerThread %d created' %i
for j in range(1, 100) :
queue.put(j)
queue.join()
for item in threads :
item.join()
print 'Scanning complete'
Python版本为2.7.5,验证了Python的路径
which python
/usr/bin/python
执行脚本时,我收到以下错误:
./multi-threaded-scanner.py
Traceback (most recent call last):
File "./multi-threaded-scanner.py", line 6, in <module>
from scapy.all import *
File "/Library/Python/2.7/site-packages/scapy/all.py", line 16, in <module>
from arch import *
File "/Library/Python/2.7/site-packages/scapy/arch/__init__.py", line 75, in <module>
from bsd import *
File "/Library/Python/2.7/site-packages/scapy/arch/bsd.py", line 12, in <module>
from unix import *
File "/Library/Python/2.7/site-packages/scapy/arch/unix.py", line 20, in <module>
from pcapdnet import *
File "/Library/Python/2.7/site-packages/scapy/arch/pcapdnet.py", line 160, in <module>
import dnet
ImportError: No module named dnet
成功退出
Pcapy:最新稳定版本(0.10.8),于2010年8月26日更新
~/Downloads/pcapy-0.10.8
sudo python setup.py安装
密码:
正在运行的安装
运行构建
运行build_ext
运行build\u脚本
正在运行安装库
运行安装脚本
将/usr/local/bin/96pings.pcap的模式更改为777
将/usr/local/bin/pcapytests.py的模式更改为777
正在运行安装数据
正在运行安装\u鸡蛋\u信息
删除/Library/Python/2.7/site-packages/pcapy-0.10.8-py2.7.egg-info
编写/Library/Python/2.7/site-packages/pcapy-0.10.8-py2.7.egg-info
~/Downloads/pcapy-0.10.8代码>
使用新标志编译的结果
~/Downloads/libdnet-1.12
sudo CFLAGS='-arch i386 -arch x86_64' ./configure --prefix=/usr and archargs='-arch i386 -arch x86_64' make
configure: WARNING: you should use --build, --host, --target
configure: WARNING: you should use --build, --host, --target
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
/Users/richardcurteis/Downloads/libdnet-1.12/config/missing: Unknown `--is-lightweight' option
Try `/Users/richardcurteis/Downloads/libdnet-1.12/config/missing --help' for more information
configure: WARNING: 'missing' script is too old or missing
checking for a thread-safe mkdir -p... config/install-sh -c -d
checking for gawk... no
checking for mawk... no
checking for nawk... no
checking for awk... awk
checking whether make sets $(MAKE)... yes
checking whether make supports nested variables... yes
checking whether to enable maintainer-specific portions of Makefiles... no
checking build system type... Invalid configuration `and': machine `and' not recognized
configure: error: /bin/sh config/config.sub and failed
~/Downloads/libdnet-1.12
编辑(30.10.19)
安装Scapy
Scapy的官方文件包括可能的捆绑包:
- 默认值,仅Scapy:
$pip安装scapy
- 推荐、Scapy和:
$pip安装--预安装[basic]
- 完整、Scapy及其所有主要依赖项:
$pip安装--预安装[完成]
安装可选依赖项
Scapy要求某些特殊功能具有一定的依赖性,例如打印、二维和三维图形、解密、操作和解密等。这些软件中的大多数都可以通过安装。Scapy的官方文档包括一些测试安装是否成功的示例
配置libpcap集成
Scapy的官方文档表明,自最新版本以来,它可以在本地工作,但可以将其配置为使用,可以使用或安装。这两种安装方法都可以很好地工作,但是Homebrew被用来运行单元测试。请注意,可能已经安装了Libpcap,例如,如果已安装,例如在的情况下
使用自制软件安装
通过Scapy.config导入配置中的在Scapy中启用它;conf.use_pcap=True
使用MacPorts安装
通过Scapy.config导入配置中的在Scapy中启用它;conf.use_pcap=True
编辑(27.05.15)
声明所有提到的问题都已修复,并提供了更简单的安装方法。然而,它的评论表明,尽管它似乎在OSX10.10Yosemite和OSX10.11ElCapitan上运行,但在某些其他版本上可能会失败
$ brew install libdnet --with-python
$ pip install pcapy
$ pip install scapy
如果自制的站点包
不在Python的sys.path
变量中,则应执行以下操作(有关详细信息,请参阅),并用实际用户名替换占位符:
如果您的系统是64位的,请改用以下编译命令:
$ CFLAGS='-arch i386 -arch x86_64' ./configure
$ archargs='-arch i386 -arch x86_64' make
此外,请确认您安装了正确的版本,即1.12而不是1.11
如果同样失败,请尝试通过MacPorts安装,并使用其dnet.so
文件,如下所述:
该链接还建议更改/Library/Python/2.7/site packages/scapy/arch/unix.py
中的一些代码(修复OSError:Device not configured
)
将第34行更改为:
f=os.popen("netstat -rn") # -f inet
致:
详情如下:
def read_routes():
if scapy.arch.SOLARIS:
# f=os.popen("netstat -rvn") # -f inet
f=os.popen("netstat -rn | grep -v vboxnet") # -f inet
如果仍然出现错误OSError:devicenotconfigured
,请尝试对If
子句的其他分支执行类似的更改(特别是对其else
分支),如中所述。我正在运行OSX 10.5.9-花了一辈子的时间试图让scapy工作-安装dnet/pcap库后,我也得到了“OSError:设备未配置”。尝试将unix.py中的第34行替换为
“netstat-rn | grep-v vboxnet”
还是有同样的错误。但是当我在if块的“else”部分更改第37行时:
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
else:
# f=os.popen("netstat -rn") # -f inet
f=os.popen("netstat -rn | grep -v vboxnet") # -f inet
工作起来很有魅力 上述所有问题似乎都已解决。我在运行OS X Yosemite。通过简单地执行以下三个命令,我获得了一个工作空间
brew install --with-python libdnet
pip install pcapy
pip install scapy
(这是对他的回答的评论,但我失去了这样做的声誉)
请记住,按照brew实际告诉您的操作:
==>注意事项
Python模块已经安装,并且自制的站点包不在您的Python sys.path中,因此您将无法导入此公式安装的模块。
如果您计划使用这些模块进行开发,请运行:[……]
因此,只需重新运行brew命令并执行它告诉您使用所有已安装的brew python软件包的两行命令。在OSX El Capitan中,对我有效的方法是强制pip使用sudo重新安装pcapy:
sudo-pip安装——用户pcapy-I
您是如何安装的scapy
和pcapy
?你用过哪些命令?是否报告了任何错误?您安装了吗?添加到原始帖子中。全部成功退出,脚本在刷新的终端中重新运行,但出现相同错误您有什么?OSX Mavericks系统版本:OSX 10.9.5(13F34)内核版本:Darwin 13.4.0启动卷:Macintosh HD启动模式:正常
是的,我也运行过,退出很好,但在导入Dnett时出现相同的错误这似乎是出错的部分<代码>来自pcapdnet导入*文件“/Library/Python/2.7/site packages/scapy/arch/pcapdnet.py”,第160行,在导入dnet导入中:没有名为dnet的模块获得配置错误,我已将输出添加到原始帖子中。抱歉,我不清楚。这是两个独立的命令,我认为前缀
标志不是必需的,所以我删除了它。请检查我更新的帖子。这似乎已经修复了它,脚本本身在我面前爆炸,但导入错误现在消失了。编辑unix.py
和
$ CFLAGS='-arch i386 -arch x86_64' ./configure
$ archargs='-arch i386 -arch x86_64' make
$ port selfupdate
$ port upgrade outdated
$ port install py27-libdnet
$ port install libdnet
$ cp /opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/dnet.so /Library/Python/2.7/site-packages
f=os.popen("netstat -rn") # -f inet
f=os.popen("netstat -rn | grep -v vboxnet") # -f inet
def read_routes():
if scapy.arch.SOLARIS:
# f=os.popen("netstat -rvn") # -f inet
f=os.popen("netstat -rn | grep -v vboxnet") # -f inet
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
else:
# f=os.popen("netstat -rn") # -f inet
f=os.popen("netstat -rn | grep -v vboxnet") # -f inet
brew install --with-python libdnet
pip install pcapy
pip install scapy
mkdir -p /Users/YourUsernameHere/Library/Python/2.7/lib/python/site-packages
echo 'import site; site.addsitedir("/usr/local/lib/python2.7/site-packages")' >> /Users/YourUsernameHere/Library/Python/2.7/lib/python/site-packages/homebrew.pth