11

私はついにLuaforWiresharkでUDPプロトコル用のDissectorを作成しましたワークフローはひどいものです。これは、エディターでカスタムLuaファイルを編集してから、サンプルキャプチャファイルをダブルクリックしてWiresharkを起動し、変更を確認することで構成されています。エラーが発生した場合、Wiresharkはダイアログまたはツリー分析サブペインの赤い線で通知します。次に、カスタムLuaファイルを再編集し、そのWiresharkインスタンスを閉じてから、サンプルキャプチャファイルをもう一度ダブルクリックします。これは、Cファイルをコンパイルして、一度に1つのコンパイラエラーしか表示しないようなものです。

Wiresharkを常に再起動しなくても、変更を確認するためのより良い(より高速な)方法はありますか?

当時、私はLuaを有効にしたWindows用のWireshark1.2.9を使用していました。

4

4 に答える 4

5

これを自動化する最良の方法は、コマンド ラインを使用することです。はい、gui をロードする代わりに tshark を使用してください。

lua スクリプトの名前が「proto.lua」で、ポート 8888 を使用する「MyProto」というプロトコルが定義されている場合、以下を使用してディセクタをテストできます。

tshark -X lua_script:proto.lua -O MyProto -V -f "port 8888"
  • -V オプションにより、tshark はすべてのプロトコルのすべての情報を出力します。
  • -O オプションは -V オプションをフィルター処理して、リストされた (CSV) プロトコルに関するすべての情報のみを表示します。
  • -f オプションは、ルールに準拠しないすべてのパケットをフィルタリングします。この場合、正しいポートからではないすべてのパケット。
于 2011-11-09T08:30:25.630 に答える
2

最新の Wireshark リリースには、lua スクリプトを実行するための基本的なコンソールが付属しています。Tools -> Lua -> Evaluate の下にあります。そこから、 を実行してディセクタをリロードできるはずですdofile()。ディセクタの以前のバージョンも削除する必要があります。

これは、TCP ベースのディセクタの例です。

local tcp_dissector_table = DissectorTable.get("tcp.port")
tcp_dissector_table:remove(pattern, yourdissector)
yourdissector = nil

dofile("c:/path/to/dissector.lua")

このコードをファイル内の関数に配置することをお勧めします。

この回答には問題があり ます。スクリプトが Proto オブジェクトを作成した場合、同じ id で再度作成することはできないようです。Proto クラスのコンストラクターは、C 関数を呼び出しますproto_register_protocol()(「参考文献」を参照epan/wslua/wslua_proto.c)。プロトコルの登録を解除する lua 関数が見つかりません。実際、登録を解除する C 関数すら見つかりません。

于 2013-06-06T02:00:58.160 に答える
1

Wiresharkがロードする簡単なラッパー関数を記述して、実際のファイルをディスクから(たとえば、経由でdofile())ロードすることができる場合があります。これはおそらく、Wiresharkを「だまして」、Luaコードに慣れてこのハックを削除できるようになるまで、常にLuaコードをリロードする可能性があります。

于 2011-01-01T17:47:46.153 に答える