在用wireshark lua编写自己的协议解析器dissector时,是可以在包字节面板(Packet Bytes pane)上加入自己的tab的,就像HTTP跨越多个TCP包时,会加上一个Reassembled TCP面板到字节面板里,用于显示整个完整的HTTP消息。
样例代码如下:
--Test add new tab to "Packet Bytes" pane (just like reassembled TCP tab) -- Author: Huang Qiangxiong ([email protected]) -- change log: -- 2010-04-27 do local test_bytearray_proto = Proto("test_bytearray_proto", "Test ByteArray") function test_bytearray_proto.dissector(tvb, pinfo, tree) local subtree = tree:add(test_bytearray_proto, tvb(), "Test ByteArray and new Tvb tabs") -- add my own data to a new tvb, it will add a new tab to "Packet Bytes" pane local ba1 = ByteArray.new("5468 6973 2069 7320 6d79 206f 776e 2064" .. "6174 612e 2048 5158 2028 7169 616e 6778" .. "696f 6e67 2e68 7561 6e67 4067 6d61 696c" .. "2e63 6f6d 290a") ---- notice: The reference of wireshark lua is wrong: ---- Tvb.new_real(bytearray, name) should be ---- bytearray:tvb( name) local tvb1 = ba1:tvb("tvb1_my_own_data") subtree:add(tvb1(), "tvb1") -- add my packet data to a new tvb, it will add a new tab to "Packet Bytes" pane local ba2 = tvb():bytes() local tvb2 = ba2:tvb("tvb2_copy_packet_data") subtree:add(tvb2(), "tvb2") end -- register to postdissector, just for test register_postdissector(test_bytearray_proto) end
代码效果是在wireshark"Packet Bytes" pane面板里添加两个自己的tab,一个用了自己的数据,另一个用协议包本身的数据。
结果如下图所示:其中tab “Frame”和“Reassembled TCP” Wireshark自己生成的;而“tvb1_my_own_data”(自己数据tab)和“tvb2_copy_packet_data”是自己添加的tab。
编程中需要注意的是,wireshark lua API手册中关于从ByteArray类型转换为TVB类型的接口Tvb.new_real(bytearray, name) 是错了,看wireshark相关源代码后得知,应该是bytearray:tvb( name)才对(其中name为tab的显示字串)。
Reference: 更多wireshark lua介绍请参考《如何在wireshark里用lua脚本编写dissector解析HTTP BODY (after TCP reassembled)》(http://blog.csdn.net/jasonhwang/archive/2010/04/25/5526383.aspx)