Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Scapy在osx上安装失败,dnet导入错误_Python_Macos_Installation_Importerror_Scapy - Fatal编程技术网

Python Scapy在osx上安装失败,dnet导入错误

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

安装Scapy时遇到问题,需要依赖。我花了一些时间在谷歌上搜索解决方案,但所有“解决方案”似乎都会影响Python的旧版本,或者根本不起作用

脚本:

#!/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