我有這樣
「數據包」 的協議 - 消息
{頭} {內容} {頭} {內容} ...
「頭」 的序列 - 1個字節
位1- 7:消息長度
位8:真味精或不是
這是一個udp通信,我必須使用第8位來確定是否需要跳過消息。
以下是我的玩具解析器,問題我面對的是如何提取幫助我作出決定的bool值。
如何在Wireshark中使用Lua字段提取器?
TOY_proto = Proto("TOY", "TOY Protocol")
local isSkip = ProtoField.new("Is Skip?", "mytoy.isSkip", ftypes.BOOLEAN, {"Yes", "No"}, 8, 0x01)
local msgLen = ProroField.new("Message Length", "mytoy.msgLen", ftypes.UINT8, nil, base.DEC, 0xFE)
TOY_proto.fields = {isSkip, msgLen}
local isSkip_Field = Field.new("mytoy.isSkip")
local function getIsSkip()
return isSkip_Field()()
end
local msgLen_Field = Field.new("mytoy.msgLen")
local function getMsgLen()
return msgLen_Field()()
end
function TOY_proto.dissector(tvbuf, pktinfo, root)
pktinfo.cols.protocol = "TOY"
local pktlen = tvbuf:reported_length_remaining()
local pos = 0
while pos < pktlen do
local headTree = tree:add("Head")
headTree:add_le(isSkip, tvbuf:range(pos,1))
headTree:add_le(msgLen, tvbuf:range(pos,1))
if getIsSkip() then
pos = pos + getMsgLen()
else
-- do something else
end
end
end
udp_table = DissectorTable.get("udp.port")
udp_table:add(6628, TOY_proto)
的問題是,在第一循環中,每一個變量是做對的,但第一個循環後,從getIsSkip()和getMsgLen返回的值()始終不變。