2008-10-23 8 views
6

Ich bin relativ neu in Python und habe Probleme mit der Programmierung mit Scapy, dem Python Netzwerk Manipulationstool. Ich kann jedoch nicht sagen, ob es sich dabei um ein Scapy-Problem handelt, sondern um ein Python-Anfänger-Problem. Auf den scapy site, geben sie ein Beispielprogramm, das ich nicht in der Lage bin auf meiner eigenen Maschine laufen zu lassen:Python - Bibliothek Probleme

#! /usr/bin/env python 

import sys 
from scapy import sr1,IP,ICMP 

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

Welchem ​​ich:

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

Also meine Frage ist dann: bei der Installation von Python Bibliotheken, muss ich meinen Weg oder etwas Ähnliches ändern? Gibt es auch etwas, das ich im Interpreter ausführen kann, um mir den Inhalt des Scapy-Pakets mitzuteilen? Ich kann from scapy import * gut laufen, aber da ich keine Ahnung habe, was drin ist, ist es schwer, es zu benutzen.

+0

Überprüfen Sie Ihre scapy Installation. Auf meinem Rechner funktioniert dein Beispiel sowohl wie du es gepostet hast als auch mit scapy als Interpreter ... –

Antwort

6

Mit dem Vorbehalt von Federico Ramponi "Sie sollten scapy als einen Interpreter für sich, nicht als eine Bibliothek verwenden", möchte ich die non-scapy-spezifischen Teile der Frage beantworten.

F: muss ich bei der Installation von Python-Bibliotheken meinen Pfad oder etwas Ähnliches ändern?

A: Ich denke, Sie sprechen über die Änderung PYTHONPATH systemweit. Dies ist normalerweise nicht erforderlich oder eine gute Idee.

Python-Bibliotheken von Drittanbietern sollten entweder in Systemverzeichnissen wie /usr/lib/python2.5/site-packages installiert oder lokal installiert werden. In diesem Fall sollten Sie PYTHONPATH in Ihrem Makefile oder in einem Treiber-Shell-Skript festlegen.

F: Gibt es auch etwas, das ich im Interpreter ausführen kann, um mir den Inhalt des scapy-Pakets zu sagen?

A: Sie können etwas tun:

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

Oder noch besser:

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

Bonus Frage in einem Kommentar gefragt.

Q: Ist "Import Scapy" das gleiche wie "aus Scapy Import *"?

A:import scapy bindet den scapy-Namen im lokalen Namespace an das scapy-Modulobjekt. OTOH, from scapy import * bindet den Modulnamen nicht, aber alle im scapy-Modul definierten öffentlichen Namen werden im lokalen Namespace gebunden.

Siehe Abschnitte 6 und 7 des Python-Referenzhandbuchs, 6.12 The import statement.

+0

Danke für die Hilfe! Quick side question: Ist 'import scapy' gleich wie 'from scapy import *'? –

+0

Der Inhalt des Pakets kann nicht immer durch dir (package_name) wegen des Lazy Fetch angegeben werden. –

3

Es sagt Ihnen, dass es sr1 in scapy nicht finden kann. Ich bin mir nicht sicher, wie weit du bist, aber der Dolmetscher ist immer dein Freund. Starten Sie den Interpreter (geben Sie einfach "python" auf der Kommandozeile ein), und geben Sie bei der Eingabeaufforderung (>>>) ein: (

)

Die letzte Zeile sollte viele Dinge drucken.Siehst du dort 'sr1', 'IP' und 'ICMP'? Wenn nicht, ist das Beispiel fehlerhaft.

Versuchen Sie helfen auch (scapy)

Das etwa ist, wie viel ich Sie ohne Installation scapy und Blick auf Ihre eigentliche Quelle-Datei selbst helfen kann.

1

Das Paket scapy ist ein Tool zur Netzwerkmanipulation und -überwachung. Ich bin neugierig, was Sie damit machen wollen. Es ist unhöflich, deine Freunde auszuspionieren. :-)

[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): 

der letzten Zeile Nach ist sr1 eine Funktion in scapy.sendrecv definiert. Jemand sollte einen Dokumentationsfehler mit dem Autor einreichen.

+0

Da Sie gefragt haben, muss ich eigentlich lernen, wie man es effektiv als Hausaufgabe für meine Sicherheitsklasse verwendet :) –

4

hatte ich das gleiche Problem, in der scapy v2.x Verwendung

from scapy.all import * 

anstelle der v1.x

from scapy import * 

als here

geschrieben Genießen =)

+0

Ausgezeichnete Entdeckung! –