Wireshark Luaプラグイン 分割されたパケットをまとめて解析する | suika7thさんのブログ

suika7thさんのブログ

ブログの説明を入力します。

WiresharkのプラグインがLuaというスクリプト言語で簡単に作成できるという噂を聞いて、トライしてみた。
ネットの情報をかき集めて、なるほど、簡単にできそうだという事は分かったが、やってみて一つ問題が出た。


とある送信側の電文が、2つのパケットに分割されていて、dissectorに断片しかわたってこない。
(つまり、パケット毎に呼び出されるdissectorで、電文の解析が完了しない)

こんな当たり前の事、google先生に聞けば、すぐに解決するだろうと思ったのだが、情報が全くない。
なぜだ、誰も困っていないのか?



こういう場合、2つのケースが考えられる。

1.本当に誰も困っていない。
  レアケースに引っかかると、本当に情報が全くない。

2.誰もが最初に引っかかるが、解決方法はいたって簡単。
  マニュアルを読め!

多分、「2」だろう・・・


という事で、マニュアルを漁ってみた所、次のような記述を見つけた。

11.9.5.12. pinfo.can_desegment
Mode: Retrieve or assign.
Set if this segment could be desegmented.

11.9.5.13. pinfo.desegment_len
Mode: Retrieve or assign.
Estimated number of additional bytes required for completing the PDU.

11.9.5.14. pinfo.desegment_offset
Mode: Retrieve or assign.
Offset in the tvbuff at which the dissector will continue processing when next called.

だから何?・・・と言いたくなるほど、不親切なマニュアルだが、試してみる価値はある。
という事で、dessectorの先頭部分に以下のようなコードを実装してみた。

    cmd_len = buffer(0,4):le_uint()
if cmd_len > buffer:len() then
pinfo.can_desegment = true
pinfo.desegment_len = cmd_len - buffer:len()
pinfo.desegment_offset = 0
return
end

なんか、うまくいった。
※これを見た方、「やってみたらできた」というモノなので、鵜呑みにしないように。