我对Python比较陌生,并且在使用Python网络操作工具Scapy进行编程时遇到了问题。但是,我不知道它是否与Scapy问题一样多,因为它是一个傻瓜新手问题。在scapy site上,他们提供了一个我无法在自己的机器上运行的示例程序:
#! /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 :(得分:6)
有了Federico Ramponi的警告“你应该用scapy作为自己的翻译,而不是作为一个图书馆”,我想回答问题的非scapy特定部分。
问:安装Python库时,是否需要更改路径或类似内容?
答:我认为您正在谈论在系统范围内更改PYTHONPATH
。这通常不是必需的或者是个好主意。
第三方Python库应该安装在系统目录中,例如/usr/lib/python2.5/site-packages
,或者安装在本地,在这种情况下,您可能希望在Makefile或驱动程序shell脚本中设置PYTHONPATH
。
问:另外,我可以在解释器中运行一些东西来告诉我scapy包的内容吗?
A:你可以这样做:
>>> import scapy
>>> dir(scapy)
甚至更好:
>>> import scapy
>>> help(scapy)
评论中提出了奖金问题。
问:'导入scapy'与'来自scapy import *'相同吗?
A: import scapy
将本地命名空间中的scapy名称绑定到scapy模块对象。 OTOH,from scapy import *
不绑定模块名称,但scapy模块中定义的所有公共名称都绑定在本地名称空间中。
参见Python参考手册的第6和第7段6.12 The import statement。
答案 1 :(得分:4)
答案 2 :(得分:3)
它告诉你它在scapy中找不到sr1。不确定你是多么新闻,但翻译总是你的朋友。启动解释器(只需在命令行上键入“python”),然后在提示符(&gt;&gt;&gt;)处键入(但不要键入&gt;,它们将自行显示):< / p>
>>> import scapy
>>> from pprint import pformat
>>> pformat(dir(scapy))
最后一行应该打印很多东西。你在哪里看到'sr1','IP'和'ICMP'?如果没有,那么这个例子是错误的。
也尝试帮助(scapy)
这就是我可以在没有安装scapy并自己查看实际源文件的情况下为您提供多少帮助。
答案 3 :(得分:1)
scapy包是一个用于网络操作和监控的工具。我很好奇你正在尝试用它做什么。窥探你的朋友真是太粗鲁了。 : - )
coventry@metta:~/src$ wget -q http://www.secdev.org/projects/scapy/files/scapy-latest.zip
coventry@metta:~/src$ unzip -qq scapy-latest.zip
warning [scapy-latest.zip]: 61 extra bytes at beginning or within zipfile
(attempting to process anyway)
coventry@metta:~/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
中定义的函数。有人应该向作者提交文档错误。