Подтвердить что ты не робот

Установка Scapy завершилась с ошибкой osx с ошибкой импорта dnet

Не удалось установить Scapy, и для этого требуются зависимости. Я потратил некоторое время на разработку Googling для решения, но все "решения", похоже, влияют на более старые версии Python или просто не работают.

Script:

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

Когда выполняется script, я получаю следующую ошибку:

./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

Я могу использовать как интерактивные интерпретаторы Scapy, так и Python, а запуск import scapy в интерпретаторе Python не вызывает ошибок. Когда был запущен script, модуль pcapy отсутствовал, однако я установил, что а затем вопрос переключился на dnet, на который я не могу найти решение. Аналогичная статья, похоже, описывает ту же проблему, но обходные решения не имеют никакого эффекта. Может ли кто-нибудь пролить свет на эту проблему?

Команды, используемые для установки pcapy и libdnet:

libdnet-1.11.tar.gz(01-19-2005)

` ~/Downloads/libdnet-1.11    
chmod a+x configure
 ~/Downloads/libdnet-1.11    
./configure  && make`

Успешно завершается

Pcapy: последняя стабильная версия (0.10.8), обновленная 26 августа 2010 г.

~/Downloads/pcapy-0.10.8 
sudo python setup.py install Password: running install running build running build_ext running build_scripts running install_lib running install_scripts changing mode of /usr/local/bin/96pings.pcap to 777 changing mode of /usr/local/bin/pcapytests.py to 777 running install_data running install_egg_info Removing /Library/Python/2.7/site-packages/pcapy-0.10.8-py2.7.egg-info Writing /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   
4b9b3361

Ответ 1

EDIT - В этом ответе ниже указано, что все упомянутые проблемы были исправлены и обеспечивает гораздо более простой способ установки. Тем не менее, его комментарии предполагают, что, хотя он, похоже, работает с OS X 10.10 Yosemite и OS X 10.11 El Capitan, он может выйти из строя для некоторых других версий.


Вы не завершили установку libdnet и его оболочку Python, как указано в Scapy руководство по установке:

$ wget http://libdnet.googlecode.com/files/libdnet-1.12.tgz
$ tar xfz libdnet-1.12.tgz
$ ./configure
$ make
$ sudo make install
$ cd python
$ python2.5 setup.py install

Если ваша система 64 бит, используйте следующие команды компиляции:

$ CFLAGS='-arch i386 -arch x86_64' ./configure
$ archargs='-arch i386 -arch x86_64' make

Кроме того, убедитесь, что вы установили правильную версию, то есть 1.12, а не 1.11.

Если это не удается, попробуйте установить через macports и используйте его файл dnet.so, как описано здесь:

$ 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

Эта ссылка также рекомендует изменить код в /Library/Python/2.7/site-packages/scapy/arch/unix.py (fix OSError: Device not configured).

Измените строку 34 из:

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

Если вы все еще получаете ошибку OSError: Device not configured, попробуйте выполнить аналогичные изменения в других ветвях предложения if (в частности, в его ветке else), как описано в этот ответ.

Ответ 2

Все проблемы, упомянутые выше, кажутся исправленными. Я запускаю OS X Yosemite. Я получил рабочую косичку просто следующими тремя командами.

brew install --with-python libdnet
pip install pcapy
pip install scapy

Ответ 3

Я запускаю OSX 10.5.9 - потратил навсегда попытку получить работу scapy - после установки библиотек dnet/pcap я также получил "OSError: Device not configure". Попробовал заменить строку 34 в файле unix.py с помощью

"netstat -rn | grep -v vboxnet"

По-прежнему такая же ошибка. Но когда я изменяю строку 37 вместо "else" части блока if:

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

Работает как шарм!

Ответ 4

(Это комментарий к Tim Wu Ответ, но мне не хватает репутации, чтобы это сделать)

Имейте в виду, что на самом деле brew говорит вам:

== > Предостережения
Модули Python были установлены, а сайты сайта Homebrew не находятся в вашем sys.path Python, поэтому вы не сможете импортировать модули, установленные этой формулой.
Если вы планируете разрабатывать эти модули, запустите: [...]

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

Итак, просто запустите команду brew и выполните две строки, в которых вам сообщается, что вы используете все установленные пакеты brew python.

Ответ 5

В OSX El Capitan, что сработало для меня, было заставить pip переустановить pcapy с помощью sudo: sudo pip install --user pcapy -I