2008-10-23 5 views
6

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

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

+0

Проверьте свою скошенную установку. На моей машине ваш пример работает так, как вы его разместили, и с scapy, как интерпретатор ... – 2008-10-23 13:55:06

ответ

6

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

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

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

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

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

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

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

Или еще лучше:

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

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

Вопрос: Является ли «import scapy» таким же, как «от scapy import *»?

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

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

+0

Спасибо за помощь! Быстрый вопрос: «import scapy» аналогичен «от scapy import»? – 2008-10-23 14:20:09

+0

содержимое пакета не всегда может быть передано dir (имя_пакета) из-за ленивой выборки. – 2010-12-02 21:09:30

3

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

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

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

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

Это о том, сколько я могу помочь вам без установки scapy и глядя на ваш фактический источник-файл сам.

1

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

[email protected]:~/src$ wget -q http://www.secdev.org/projects/scapy/files/scapy-latest.zip 
[email protected]:~/src$ unzip -qq scapy-latest.zip 
warning [scapy-latest.zip]: 61 extra bytes at beginning or within zipfile 
    (attempting to process anyway) 
[email protected]:~/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. Кто-то должен написать ошибку с автором.

+0

Поскольку вы спросили, мне действительно нужно научиться эффективно использовать его в качестве домашней работы для моего класса безопасности :) – 2008-10-23 19:18:25

4

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

from scapy.all import * 

вместо этого v1.x

from scapy import * 

как написано here

Наслаждайтесь =)

Смежные вопросы