Wireshark启发式解剖器解码作为数据包的一部分

时间:2019-04-04 09:09:21

标签: lua wireshark wireshark-dissector

我写了一个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")

ethernet trailer crc before ixia

在普通小包中,它看起来像下面这样:

enter image description here

下面是完整的简化代码来显示问题:

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)

这是带有预告片https://transfernow.net/019rp7t214kv

的pcap文件示例

0 个答案:

没有答案