そこで、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()
ここに別のトピックがあるため、「try」を作成しました(解決策として試してみました)。このコードでの私の現在の出力は次のとおりです
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
from scapy.all import *を使用して、「try」なしで試してみる場合。
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で見つかったさまざまなインポート方法を試しましたが、それでも機能しません。誰かが私が間違っていることを教えてもらえますか? (この投稿のインデントは気にしないでください)
Scapyソースを見ると、scapyパッケージはimport
に何も表示されないか、__all__
に__init__
を定義していません。その結果、まだimport scapy.all
に含まれていないため、他の何かをfrom scapy import all
する前に、明示的にfrom scapy.all import
(またはsys.modules
)する必要があります。ただし、インタプリタがモジュールをインポートした後は、どこにあるかに関係なく、それ以降に実行されるすべてのコードで使用できるようになるため、これはプログラムフローで1回だけ発生する必要があることに注意してください。詳細については、 モジュールに関するPythonドキュメント とimport
、特にパッケージのインポートがどのように機能するかをご覧ください。
編集:私は今問題が発生していると思います、私はあなたのスタックトレースの間違った部分に注意を払っていました。ここで扱っているのは名前の衝突です。ファイルの名前はscapy.py
であるため、そのファイルのコンテキストからimport scapy
を実行すると、実際にはファイル自体がモジュールとしてインポートされます。ファイルにはall
という名前のサブモジュールがないため(パッケージではないため、サブモジュールはありません)、表示されているインポートエラーが発生します。ファイルの名前を、インポートしたいパッケージやモジュールと競合しない名前に切り替えてみて、それがうまくいくかどうかを確認してください。
ちなみに、スタックトレースでは、インポートが実際には基本的に1つのファイルを再帰的に呼び出していることに注意してください。これは、インポートプロセスで何かがうまくいかなかったという手がかりになるはずです。
かなり古い投稿。まだ探しているものの場合、現在のバージョンでの正しいインポートは次のようになります。
from scapy.all import *
これは、現在のディレクトリにscapy.py
があるときに見ました。 scapy.all import *
は最初に現在のディレクトリを調べているようです。
OSXでも同様の問題が発生し、scapyパッケージpip install scapy
をインストールしてから、テストファイルscapy.py
を実行しようとしました。発生したエラーは次のとおりです。
python scapy.py
Traceback (most recent call last):
File "scapy.py", line 1, in <module>
from scapy.all import *
File "/Users/**/Desktop/scapy-test/scapy.py", line 1, in <module>
from scapy.all import *
ModuleNotFoundError: No module named 'scapy.all'; 'scapy' is not a package
私の場合、scapy.py
とは呼べない問題を引き起こしたのはファイル名そのものでした。 test.py
に変更すると、すべて機能しました。パッケージの場所とは関係なく、ファイル名だけでした。