2012-11-28 54 views
7

因此,我在Ubuntu中爲scapy寫了一個小腳本。Scapy.all導入*不起作用

#!/usr/bin/env python 
import sys 
#from scapy.all import * 
try 
    import scapy 
    except ImportError: 
    del scapy 
    from scapy import all as scapy 
i= IP() 
t= TCP() 
i.dst='192.168.56.100' 
t.dport=22 
pakket=i/t 
answered,unanswered=sr(pakket) 
answered.nsummary() 

我寫了'嘗試',因爲這裏的另一個主題(嘗試它作爲解決方案)。 我使用此代碼的電流輸出以下

Traceback (most recent call last): 
File "./scapy.py", line 5, in <module> 
import scapy 
File "/home/nicholas/scapy.py", line 9, in <module> 
i=IP() 
NameError: name 'IP' is not defined 

從scapy.all進口* withouth的「試用」只是想它的時候。

Traceback (most recent call last): 
File "./scapy.py", line 3, in <module> 
from scapy.all import * 
File "/home/nicholas/scapy.py", line 3, in <module> 
from scapy.all import * 
ImportError: No module named all 

我嘗試過在Google上找到不同的輸入方式,但它仍然無效。任何人都可以告訴我我做錯了什麼? (不介意這篇文章的縮進)

+2

請修正縮進,他們做的事。 – Tadeck

+0

嘗試類似* from scapy.all導入IP,TCP,sr *如果您沒有使用任何其他內容(沒有嘗試除外) –

+0

我仍然在嘗試使用'No module named all' – Nicholas

回答

2

從scapy的來源看來,scapy軟件包並不是import任何東西,或者是在__init__中定義了__all__。因此,您需要明確import scapy.all(或from scapy import all),然後才能from scapy.all import其他任何東西,因爲它不會在sys.modules尚未。請注意,這隻會在程序流程中發生一次,因爲在解釋器導入模塊後,它將適用於從此時開始執行的所有代碼,而不管它在哪裏。看看Python docs on modules以及如何import,特別是導入一個軟件包,更多細節。

編輯: 我想我現在看到了問題,我只是注意到你的堆棧跟蹤的錯誤部分。很確定你在這裏處理的是名稱衝突。您的文件名爲scapy.py,因此當您從該文件的上下文中import scapy時,您實際上是將文件本身作爲模塊導入。由於您的文件沒有名爲all的子模塊(它不能,因爲它不是包),所以您會看到導入錯誤。嘗試將文件的名稱切換爲與您希望導入其中的任何包或模塊不衝突的內容,並查看該內容是否更好。

順便說一句,請注意你的堆棧跟蹤你的導入實際上是遞歸調用你的一個文件。這應該是導致進口過程中出現問題的線索。

+1

這不適用真的幫助我,仍然得到像'沒有模塊命名所有' – Nicholas

+0

編輯我的答案,我認爲這應該解決您的問題。 –

+0

那麼我們正在某個地方。但是當我改變名字時,它抱怨一個'壞魔法數字'。我刪除了scapy.pyc,如http://stackoverflow.com/questions/514371/whats-the-bad-magic-number-error。但是,你如何用正確的魔法數回來? *編輯,似乎現在工作!我把python3放在腳本執行的前面,但似乎沒有必要,謝謝!認真地感謝, – Nicholas

0

我在當前目錄中有scapy.py時看到了這個。 scapy.all import *似乎先看當前目錄。

1

相當舊的帖子。 對於那些仍在尋找,與當前版本的正確進口將是:

from scapy.all import *