UDP で構築されたプロトコルがあり、Wireshark でサードパーティの dll によって部分的に分析されています。残りのフィールド「データ」に適用するカスタムディセクタを作成したいと思います。
これを行うには、ディセクタ、ポストディセクタ、リスナー、またはそれらの組み合わせを使用する必要がありますか? それとも、サードパーティのディセクタを、残りのデータで私のディセクタを呼び出すものに書き直す必要がありますか?
UDP で構築されたプロトコルがあり、Wireshark でサードパーティの dll によって部分的に分析されています。残りのフィールド「データ」に適用するカスタムディセクタを作成したいと思います。
これを行うには、ディセクタ、ポストディセクタ、リスナー、またはそれらの組み合わせを使用する必要がありますか? それとも、サードパーティのディセクタを、残りのデータで私のディセクタを呼び出すものに書き直す必要がありますか?
John Zwinck が述べたように、Lua または C でかなり簡単に管理できる連鎖型ディセクタのようなものが必要になるでしょう。そのためには、ロジックをディセクタとして実装する必要があります。Lua では、次のようになります。
do
--TODO set up your extra "data" field
local tcp_table = DissectorTable.get("tcp.port")
local third_party_dissector tcp_table:get_dissector(PROTO_PORT)
function your_protocol.dissector(tvb, pinfo, tree)
--call the third party dissector
third_party_dissector:call(tvb, pinfo, tree)
--TODO do what you need with the data
end
--take over the port your protocol runs over
tcp_table_add(PROTO_PORT, your_protocol)
end
APIは手元に置いておきますが、Wireshark の Lua ディセクタは実際にはプロトタイピング用であることにも注意してください。それらは同等の C ベースのディセクタよりも効率が悪く、API は C ディセクション API より数バージョン遅れる傾向があります。
私がこのようなことをしたいと思ったとき、私はそれが驚くほど複雑で不快であることに気付きました (一般的な Lua ディセクタ開発に比べて)。http://wiki.wireshark.org/Lua/Dissectorsに「チェーンされたディセクタ」についての言及があります。私が読んだことから (私は私の仕事をしたことはありませんでしたが、あまり一生懸命努力しませんでした)、Lua よりも C でチェーンされたディセクタを作成する方が簡単なようです。それでも、そのページの例に従ってみてください。ありがたいことに、かなり明確にするのに十分なコメントがあります。