2008-10-23 71 views
6

我对Python相对比较陌生,并且在使用Python网络操作工具Scapy编程时遇到问题。但是,我不能说它是否是一个Scapy问题,因为它是一个存在Python新手的问题。在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安装。在我的机器上,您的示例既可以作为您的发布,也可以与scapy一起作为解释器工作... – 2008-10-23 13:55:06

回答

6

随着Federico Ramponi的警告“你应该使用scapy作为自己的解释器,而不是图书馆”,我想回答问题的非scapy特定部分。

问:安装Python库时,是否需要更改我的路径或类似的东西?

- 答:我想你是在谈论改变系统范围内的PYTHONPATH。这通常不是必需的或者是一个好主意。

第三方Python库要么被安装在系统目录中,如/usr/lib/python2.5/site-packages,或本地安装的,在这种情况下,你可能需要设置在Makefile PYTHONPATH或在司机shell脚本。

问:另外,有什么我可以在解释器中运行告诉我scapy包的内容?

答:你可以做这样的事情:

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

甚至更​​好:在注释问

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

奖金的问题。

问:'scapy进口'和'from scapy import *'一样吗?

答:import scapy将本地名称空间中的scapy名称绑定到scapy模块对象。 OTOH,from scapy import *不绑定模块名称,但scapy模块中定义的所有公共名称都绑定在本地名称空间中。

请参阅Python参考手册的第6和7段,6.12 The import statement

+0

感谢您的帮助!快速方面的问题:'scapy import'与'scapy import *'相同吗? – 2008-10-23 14:20:09

+0

由于延迟获取,dir(package_name)无法始终告知包的内容。 – 2010-12-02 21:09:30

3

它告诉你它无法在scapy中找到sr1。不知道你是多么新鲜,但翻译永远是你的朋友。启动解释器(只需在命令行中键入“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的版本2.x使用

from scapy.all import * 

代替

from scapy import * 

书面here

享受它的1.x版=)