2008-10-23 70 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版=)