我写了一个ixia lua解剖器。其他类似解剖器也有同样的问题。
是的,我知道已经用c编写了解剖器,但是它开箱即用,至少对于我的跟踪来说不是这样-我还尝试了将“固定以太网拖车长度固定”为19的解决方法。也许没用,因为我的数据包是通过隧道传输的,所以我有2个以太网层。
我成功解析了ixia预告片。
我的问题是eth_trailer crc由我的解剖器解析
使用添加的代码,现在crc出现在ixia层之前,而不是以太网层树下。是否有可能将以太网层下的crc显示为没有ixia的数据包?
if offset_ixia == 4 then
local subtree = tree:add(ixia_trailer_proto, buffer(0,offset_ixia),"eth.trailer")
end
local subtree = tree:add(ixia_trailer_proto, buffer(offset_ixia,length-offset_ixia),"Ixia trailer")
在普通小包中,它看起来像下面这样:
下面是完整的简化代码来显示问题:
ixia_trailer_proto = Proto("ixia_trailer","Ixia-lua Trailer")
-- Header fields
source = ProtoField.uint8("ixia_trailer_proto.source" , "Source" , base.HEX)
ixia_trailer_proto.fields = {source}
offset_ixia = 0
-- create a function to dissect it
local function is_ixia_trailer(buffer,pinfo,tree)
local length = buffer:len()
--eth + ip
if length < 15 then return false end
if length == 15 then
type_offset = 11
elseif length == 19 then -- 15 + crc size
type_offset = 15
offset_ixia = 4
end
local type = buffer( type_offset , 2):uint()
if type == 0xaf12 then
ixia_trailer_proto.dissector(buffer, pinfo, tree)
return true
end
return false
end
function ixia_trailer_proto.dissector(buffer, pinfo, tree)
length = buffer:len()
if offset_ixia == 4 then
local subtree = tree:add(ixia_trailer_proto, buffer(0,offset_ixia),"eth.trailer")
end
local subtree = tree:add(ixia_trailer_proto, buffer(offset_ixia,length-offset_ixia),"Ixia trailer")
subtree:add(source, buffer(offset_ixia + 0,1))
end
ixia_trailer_proto:register_heuristic("eth.trailer", is_ixia_trailer)
的pcap文件示例