I’m relatively new to Python and am having problems programming with Scapy, the Python network manipulation tool. However, I can’t tell if it’s as much a Scapy problem as it is a being-a-Python-newbie problem. On the scapy site, they give a sample program which I’m not able to run on my own machine:
#! /usr/bin/env python import sys from scapy import sr1,IP,ICMP p=sr1(IP(dst=sys.argv[1])/ICMP()) if p: p.show()
To which I get:
Traceback (most recent call last): File 'test.py', line 4, in <module> from scapy import sr1,IP,ICMP ImportError: cannot import name sr1
So my question then is: when installing Python libraries, do I need to change my path or anything similar? Also, is there something I can run in the interpreter to tell me the contents of the scapy package? I can run from scapy import * just fine, but since I have no idea what’s inside it, it’s hard to use it.
With the caveat from Federico Ramponi ‘You should use scapy as an interpreter by its own, not as a library’, I want to answer the non-scapy-specific parts of the question.
Q: when installing Python libraries, do I need to change my path or anything similar?
A: I think you are talking about changing
PYTHONPATHsystem-wide. This is usually not required or a good idea.Third party Python libraries should either be installed in system directories, such as
/usr/lib/python2.5/site-packages, or installed locally, in which case you might want to setPYTHONPATHin your Makefile or a in driver shell script.Q: Also, is there something I can run in the interpreter to tell me the contents of the scapy package?
A: You can do something like this:
Or even better:
Bonus question asked in a comment.
Q: Is ‘import scapy’ the same as ‘from scapy import *’?
A:
import scapybinds the scapy name in the local namespace to the scapy module object. OTOH,from scapy import *does not bind the module name, but all public names defined in the scapy module are bound in the local namespace.See paragraphs 6 and 7 of the Python Reference Manual, 6.12 The import statement.