Python - Проблемы с библиотекой - PullRequest
6 голосов
/ 23 октября 2008

Я относительно новичок в Python, и у меня проблемы с программированием с помощью Scapy, инструмента управления сетью Python. Тем не менее, я не могу сказать, является ли это проблемой Scapy так же, как проблемой «быть новичком в Python». На сайте scapy приводятся примеры программ, которые я не могу запустить на своей машине:

#! /usr/bin/env python

import sys
from scapy import sr1,IP,ICMP

p=sr1(IP(dst=sys.argv[1])/ICMP())
if p:
    p.show()

На что я получаю:

Traceback (most recent call last):
  File "test.py", line 4, in <module>
    from scapy import sr1,IP,ICMP
ImportError: cannot import name sr1

Итак, мой вопрос: нужно ли при установке библиотек Python менять свой путь или что-то подобное? Кроме того, есть ли что-то, что я могу запустить в интерпретаторе, чтобы сообщить мне содержимое пакета scapy? Я могу запустить from scapy import * просто отлично, но так как я понятия не имею, что внутри него, его трудно использовать.

Ответы [ 4 ]

6 голосов
/ 23 октября 2008

С предупреждением от Федерико Рампони: «Вы должны использовать scapy как переводчика, а не как библиотеку», я хочу ответить на не связанные с scapy части вопроса.

В: при установке библиотек Python мне нужно изменить свой путь или что-то подобное?

A: Я думаю, вы говорите об изменении PYTHONPATH в масштабе всей системы. Обычно это не требуется или хорошая идея.

Сторонние библиотеки Python должны быть либо установлены в системных каталогах, таких как /usr/lib/python2.5/site-packages, либо установлены локально, в этом случае вы можете установить PYTHONPATH в вашем Makefile или в скрипте оболочки драйвера.

Q: Кроме того, могу ли я что-то запустить в интерпретаторе, чтобы сообщить мне содержимое пакета scapy?

A: Вы можете сделать что-то вроде этого:

>>> import scapy
>>> dir(scapy)

Или даже лучше:

>>> import scapy
>>> help(scapy)

Бонусный вопрос задан в комментарии.

Q: Является ли 'импорт scapy' таким же, как 'из импорта scapy *'?

A: import scapy связывает имя scapy в локальном пространстве имен с объектом модуля scapy. OTOH, from scapy import * не привязывает имя модуля, но все публичные имена, определенные в модуле scapy, связаны в локальном пространстве имен.

См. Пункты 6 и 7 Справочного руководства по Python, 6.12 Оператор импорта .

4 голосов
/ 03 июня 2009

У меня была такая же проблема, в scapy v2.x используйте

 from scapy.all import * 

вместо v1.x

 from scapy import *

как написано здесь

Наслаждайся этим =)

3 голосов
/ 23 октября 2008

Он говорит вам, что не может найти sr1 в scapy. Не уверен, насколько ты новичок, но переводчик всегда твой друг. Запустите интерпретатор (просто введите «python» в командной строке) и введите в командной строке (>>>) (но не вводите>, они будут отображаться сами):

>>> import scapy
>>> from pprint import pformat
>>> pformat(dir(scapy))

В последней строке должно быть напечатано много вещей. Вы видите где-нибудь 'sr1', 'IP' и 'ICMP'? Если нет, то пример ошибочен.

Попробуйте также помочь (scapy)

Это то, чем я могу вам помочь, не устанавливая scapy и не просматривая сам ваш исходный файл.

1 голос
/ 23 октября 2008

Пакет scapy представляет собой инструмент для манипулирования сетью и мониторинга. Мне любопытно, что ты пытаешься с этим сделать. Глупо шпионить за своими друзьями. : -)

coventry@metta:~/src$ wget -q http://www.secdev.org/projects/scapy/files/scapy-latest.zip
coventry@metta:~/src$ unzip -qq scapy-latest.zip 
warning [scapy-latest.zip]:  61 extra bytes at beginning or within zipfile
  (attempting to process anyway)
coventry@metta:~/src$ find scapy-2.0.0.10 -name \*.py | xargs grep sr1
scapy-2.0.0.10/scapy/layers/dns.py:    r=sr1(IP(dst=nameserver)/UDP()/DNS(opcode=5,
scapy-2.0.0.10/scapy/layers/dns.py:    r=sr1(IP(dst=nameserver)/UDP()/DNS(opcode=5,
scapy-2.0.0.10/scapy/layers/inet6.py:from scapy.sendrecv import sr,sr1,srp1
scapy-2.0.0.10/scapy/layers/snmp.py:            r = sr1(IP(dst=dst)/UDP(sport=RandShort())/SNMP(community=community, PDU=SNMPnext(varbindlist=[SNMPvarbind(oid=oid)])),timeout=2, chainCC=1, verbose=0, retry=2)
scapy-2.0.0.10/scapy/layers/inet.py:from scapy.sendrecv import sr,sr1,srp1
scapy-2.0.0.10/scapy/layers/inet.py:            p = sr1(IP(dst=target, options="\x00"*40, proto=200)/"XXXXYYYYYYYYYYYY",timeout=timeout,verbose=0)
scapy-2.0.0.10/scapy/sendrecv.py:def sr1(x,filter=None,iface=None, nofilter=0, *args,**kargs):

Согласно последней строке, sr1 - это функция, определенная в scapy.sendrecv. Кто-то должен сообщить об ошибке документации автору.

...