はじめに
WiresharkはLua言語で独自プロトコルを解析するプラグインを作成できるため、とても便利です。が、馴染みのないLua言語でのプラグイン開発は苦労も多いため、いろいろとQiitaにまとめることにしました。
プラグインのインストール
.luaファイルをロードすることで、プラグインが有効になります。
読み込ませる方法は複数あり、いずれも一長一短があるようです。
読み込ませ方 | メリット/デメリット |
---|---|
init.luaからdofile関数を実行する | 【メリット】dofile関数が使用できる。 【デメリット】再インストールで設定が消える。 |
pluginsフォルダに配置する | 【メリット】公式のプラグイン利用方法である。 【デメリット】dofile関数が使えない。 |
init.luaからdofile関数を実行する
インストール先フォルダにあるinit.luaファイルは、最初にロードされる.luaファイルのようです。init.luaファイルの末尾にdofile関数を用いたコードを記載することで.luaファイルをロードすることができます。但し、アップデート等で再インストールされると、同時にinit.luaファイルが初期化されてしまうようです。dofile関数を用いたコードの記載例は以下の通りです。
-- init.luaの末尾
DATA_DIR = Dir.global_config_path()..package.config:sub(1,1) -- init.luaがあるフォルダ
dofile(DATA_DIR.."sample_plugin.lua")
pluginsフォルダに配置する
指定の場所にpluginsフォルダを作成し、その中に配置した.luaファイル(サブフォルダ以下もロードされる)はプラグインとして読み込まれます。但し、dofile関数が無効化されているため、共通のロジックを1ファイルにまとめておいて、各プロトコルでコードを再利用するといったテクニックは使えません。pluginsフォルダの場所は以下の通りです。(Wireshark Developer’s Guide Appendix B.4.)
OS | Path |
---|---|
Windows | %APPDATA%/Wireshark/plugins |
Linux | ~/.local/lib/wireshark/plugins |
デバッグの方法
プラグインのリロード
.luaファイルは起動時に読み込まれますが、再起動をしなくても「Ctrl+Shift+L」でプラグインがリロードされます。
コンソールの利用
起動後に「ツール」→「Lua」から「console」と「evaluate」を起動することで、ちょっとしたコードを試しに実行することができます。Wireshark’s Lua API Reference Manualにある関数を試してみたい時に便利です。
evaluateウィンドウに以下のコードを記載し、Evaluateボタンを押すと、
-- wiresharkに登録されているDissectorの一覧を表示するプログラム
-- ref) https://www.wireshark.org/docs/wsdg_html_chunked/lua_module_Proto.html
for key, val in pairs(Dissector.list()) do
print(key,val)
end
以下の結果がConsoleウィンドウに表示されます。
2019/06/22 17:40:46 1 6lowpan
2019/06/22 17:40:46 2 CI+ SAC message
2019/06/22 17:40:46 3 DOF Object Identifier
2019/06/22 17:40:46 4 DOF Tunnel Protocol
2019/06/22 17:40:46 5 DOF Tunnel Protocol Stack
サンプルスクリプトの応用
プラグインを作成する上では、サンプルスクリプトを真似るのが最も近道です。有用なサンプルスクリプトの一覧は以下の通りです。