1

特定のネットワーク スキャン ツール (nmap、xprobe、p0f など) を指定するオプションをユーザーに提供し、そのツールを使用して特定のサブネットをスキャンするアプリケーションを作成しました (ツールを再実装せず、シェルで呼び出すだけです)。アプリの応答を解析します)、結果を解析し、特定の形式で DB に格納します。このアプリケーションは基本的に、DB 内のデータを使用する別のアプリのフィーダー アプリケーションです。

すべてのスキャン ツール インターフェイスがプラグインとして実装されるようにコードを記述しました。構造は

Project/
   DBWriter.py 
   Scanner/
      __init__.py
      network_mapper.py
      Scanner.py
      Plugins/
         __init__.py
         nmap.py
         p0f.py
   Others/  

したがって、新しいスキャン インターフェイスを追加するには、開発者が行う必要があるのは、(もちろん正しいセマンティクスで) tool.py ファイルを作成し、それを Plugins フォルダーにドロップすることだけです。

これを実現するには、実行時に正しい python モジュールをインポートできる必要があります。

from Plugins import nmap
or
from Plugins import xprobe

ユーザーが入力する内容に応じて

これが私が追加したコードです

f,p,d = imp.find_module("Plugins")
x = imp.load_module("Plugins",f,p,d)
path_n = x.__path__
f,p,d = imp.find_module("%s"%(tool),path_n)
tool_mod = imp.load_module("%s"%(tool),f,p,d)
tool_mod.scan() #Irrespective of what user enters or what new plugin is  developed, this line does not need to change and will work as long as plug-in has a scan function

コードは正しく動作します。ただし、 PyInstaller (Windows/* Nix プラットフォーム用)を使用して 1 つの実行可能ファイルにバンドルしようとすると、find_module と load_module で多くの問題が発生し、その結果、ImportError が発生します (実行可能ファイルでパスが正しく展開されていない可能性があります)。減圧)。

私の質問は - Python で同じ機能を実現できる別の方法はありますか (うまくいけば PyInstaller でうまくいくかもしれません)。

以前、PyInstaller での回避策を探してこの質問をしましたが、Python での回避策を探すことを余儀なくされた回答はありませんでした。

4

1 に答える 1

0

Windows でのみ実行する必要がある場合は、py2exeを試すことをお勧めします。

py2exe は、Python スクリプトを実行可能な Windows プログラムに変換する Python Distutils 拡張機能であり、Python のインストールを必要とせずに実行できます。

非常に大きなPythonプログラムを高速化するために仕事で使用しており、インポートされたモジュールに対応しています。

于 2011-10-17T06:11:46.370 に答える