13

そこで、Ubuntu で scapy 用の小さなスクリプトを作成しました。

#!/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

「try」なしで from scapy.all import * だけで試してみると。

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 にあるさまざまなインポート方法を試しましたが、それでもうまくいきません。誰かが私が間違っていることを教えてもらえますか? (この投稿のインデントは気にしないでください)

4

5 に答える 5

8

scapy ソースを見ると、scapy パッケージは何にも表示されず、 inimportも定義されていません。その結果、まだ含まれていないため、そこから何か他のことを行う前に、明示的に(または) する必要があります。ただし、これはプログラム フローで 1 回だけ行う必要があることに注意してください。インタープリターがモジュールをインポートした後は、モジュールがどこにあるかに関係なく、それ以降実行されるすべてのコードで使用できるようになります。詳細については、モジュールに関する Python ドキュメントと、具体的にはパッケージのインポートがどのように機能するかをご覧ください。__all____init__import scapy.allfrom scapy import allfrom scapy.all importsys.modulesimport

編集:私は今問題を見ていると思います.スタックトレースの間違った部分に注意を払っていました. ここで扱っているのは名前の衝突であることは間違いありません。ファイルの名前scapy.pyは であるため、import scapyそのファイルのコンテキストから見ると、実際にはファイル自体をモジュールとしてインポートしています。ファイルには名前付きのサブモジュールがallないため (パッケージではないため、できません)、表示されているインポート エラーが発生します。ファイルの名前を、その中にインポートするパッケージやモジュールと競合しない名前に変更してみて、それがうまくいくかどうかを確認してください。

ところで、スタック トレースで、インポートが実際には 1 つのファイルを本質的に再帰的に呼び出していることに注意してください。これは、インポート プロセスで何かがおかしくなったことの手がかりになるはずです。

于 2012-11-28T16:54:37.917 に答える