web-dev-qa-db-ja.com

Scapy.all import *は機能しません

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

9
Nicholas

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つのファイルを再帰的に呼び出していることに注意してください。これは、インポートプロセスで何かがうまくいかなかったという手がかりになるはずです。

4
Silas Ray

かなり古い投稿。まだ探しているものの場合、現在のバージョンでの正しいインポートは次のようになります。

from scapy.all import *

1
Cukic0d

これは、現在のディレクトリにscapy.pyがあるときに見ました。 scapy.all import *は最初に現在のディレクトリを調べているようです。

0
chris77

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に変更すると、すべて機能しました。パッケージの場所とは関係なく、ファイル名だけでした。

0
Daniel