如何访问Lua Tap Listener中的其他层字段或点击更高层?

问题描述 投票:0回答:2

准备用Lua对trace做一些统计操作。每个IP数据包可以有多个TCAP,每个TCAP可以有多个CAP操作,如

IP {[SCTP-M3UA-SCCP-TCAP-CAP,CAP] [SCTP-M3UA-SCCP-TCAP-CAP,CAP,CAP]}

现在我想访问整个树或在 Lua 侦听器 Tap 的 TCAP 层中以某种方式进行迭代。这种迭代的目的是遵循 TCP 流,因为事务 ID 保存在 TCAP 层,而应考虑 Camel (CAP) 层的操作和参数顺序。

如果获取下层数据部分,如何在侦听器点击中访问解剖器树或解剖上层?

例如,节点 ID 出现在最高层 (CAP) 中的 1 个新会话的第一次操作中,以及同一数据包中的另一个会话。然后需要计数的另一个参数出现在另一个操作/数据包中,同时要检查 TCAP 中的相同 TID 以确保其属于同一节点。

lua wireshark
2个回答
1
投票

这不是对你问题的回复,只是提示。

您应该使用数组作为字段提取器而不是普通值。 例如:

tap_diameter = nil
diaSessionIdExtr = Field.new("diameter.Session-Id")
tap_diameter = Listener.new("frame", "diameter && !tcp.analysis.retransmission && !tcp.analysis.lost_segment")

function tap_diameter.packet(pinfo,tvb,userdata)
    local answers = {diaSessionIdExtr()}  -- this is how to do it
    for i in pairs(answers) do
       debug(answers[i])
    end
end

0
投票

我面临着类似的问题(想要计算一些基于 QUIC 帧的统计数据,其中单个数据包可以包含许多这样的帧)。 从 Wireshark 4.2.7 开始,似乎无法从侦听器 Tap 访问完整的解析器树。而且似乎没有办法迭代嵌套框架。

但是,您可以使用“all_field_infos()”迭代由解析器填充的所有字段,请参阅:https://www.wireshark.org/docs/wsdg_html_chunked/lua_module_Field.html

计算 QUIC 帧类型的工作示例:

 local L = Listener.new(nil, 'quic.frame_type')  -- filter needed to pre-fill specific field
 local cnt = {}
 
 function L.packet(pinfo, tvb)
    local fields = { all_field_infos() }
    for i,fi in ipairs(fields) do
       -- for single packet same field can be present multiple times
       if fi.name == "quic.frame_type" then
          local key = fi.display
          cnt[key] = (cnt[key] or 0) + 1
       end
    end
 end
 
 retap_packets()
 -- show what we got...
 for k,v in pairs(cnt) do
    print (v, k)
 end
 L:remove()  -- remove the listener
© www.soinside.com 2019 - 2024. All rights reserved.