Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Python - Library Problems

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.

like image 808
Chris Bunch Avatar asked Oct 23 '08 13:10

Chris Bunch


Video Answer


1 Answers

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 PYTHONPATH system-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 set PYTHONPATH in 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:

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

Or even better:

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

Bonus question asked in a comment.

Q: Is 'import scapy' the same as 'from scapy import *'?

A: import scapy binds 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.

like image 153
ddaa Avatar answered Nov 01 '22 16:11

ddaa