2011-11-15 14 views
1

私はUDP上に構築されたプロトコルを持っており、それはWiresharkの第三者のDLLによって部分的に解読されています。残りのフィールド "データ"に適用するカスタムディセクタを作成したいと考えています。Luaを使ってWiresharkで既に解剖されたパッケージのフィールドを解剖するには?

これを行うことは可能ですか?これを達成するために、切除術、切開後切除術、またはリスナーまたはそれらの組み合わせを使用する必要がありますか?あるいは、残りのデータについて私の解剖学者に電話をかける第三者の解剖医に書き直さなければならないのですか?

+2

WiresharkのQ&Aサイトhttp://ask.wireshark.org/ – sylvanaar

答えて

3

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の後ろにいくつかのバージョンに遅れがちです。

1

私はこのようなことをしたいと思ったとき、私は驚くほど複雑で不快であることを発見しました(一般的にLuaディセクターの開発と比較して)。ここに「連鎖解剖」のいくつかの言及があります:http://wiki.wireshark.org/Lua/Dissectors。私が読んだこと(私は働いたことはありませんでしたが、私はあまりにも頑張っていませんでした)から、LuaよりもCで連鎖解剖をする方が簡単です。それでも、そのページの例に従ってみてください。このページには、ありがたいことに、かなり明確にするための十分なコメントがあります。

+0

を参照してください。同じように感じます。私はHaskellでパケットアナライザを書いてみたいです... :)ありがとう、それを逃した。残念ながら私はそれを働かせることができませんでした。本当に古いバージョンのWireshark(0.99.7)を使わなければならないかもしれません。 – ihatetoregister

関連する問題