Вопрос

Я относительно новичок в 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? Я могу просто запустить из scapy import * , но поскольку я понятия не имею, что внутри него, его трудно использовать.

Это было полезно?

Решение

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

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

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

Сторонние библиотеки Python должны быть либо установлены в системных каталогах, таких как /usr/lib/python2.5/site-packages , либо установлены локально, в этом случае вы можете установить < code> 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. заявление на импорт .

Другие советы

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

 from scapy.all import * 

вместо v1.x

 from scapy import *

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

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

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

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

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

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

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

Пакет 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 . Кто-то должен сообщить об ошибке документации автору.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top