首页 > 解决方案 > 来自 Diameter 3GPP 的统计 Lua 脚本

问题描述

我正在尝试创建一个 lua 脚本来通过 Diameter pcap,收集我感兴趣的信息并生成统计信息。

这部分成功,可以在GitHub中找到工作脚本,但我仍然有一些疑问

Field.new() 和多次出现的 AVP

Field.new()用来检索 AVP,例如:

local rrField = Field.new("diameter.3GPP-Reporting-Reason")
local toField = Field.new("diameter.CC-Total-Octets")

但是在单个数据包中可能会多次出现 AVP。当然,我可以将它们作为数组从

local rrFields = {rrField()}
local toFields = {toField()}

但是我缺少AVP 中检索到的参考。一个很好的例子是Result-Code AVP

图片说明

这个单一的直径消息它出现了三次,但结果我只得到了三个 2001 的数组,而没有很好地理解它出现在哪个级别。

当单个包包含多个Diameter 消息时,情况变得更加混乱。然后我什至无法确定AVP来自哪条消息。

函数 tap.packet(pinfo, tvb, tapdata) 不填充 tapdata

另一个想法是深入研究tapdata。如果我理解正确11.4.1.5。listener.packettapdata(aka tapinfo)应填充解剖数据,对吗?因此我应该能够解析消息。

但是,无论我多么努力,tapdata总是未设置(即 nil)。在 GitHub 代码中

       tap = Listener.new("diameter", filter)

但我也尝试了第三个参数,将其设置为true(希望生成所有字段,即使以性能损失为代价)。没运气。

[更新 2020/03/20]

自我回答Function tap.packet(pinfo, tvb, tapdata) does not populate tapdata

检查 Wireshark (tshark) 的源代码后发现,Diameter 没有填充此变量,因为 tapdata 没有引用 Diameter。我试图将它添加到taps定义中并且变量(表)已被填充,甚至散列的名称也可以。但是哈希中的变量不是......无论如何,这是变化:

MBP:wireshark jhartman$ git diff epan/wslua/taps
diff --git a/epan/wslua/taps b/epan/wslua/taps
index 11b1132171..ea28865109 100644
--- a/epan/wslua/taps
+++ b/epan/wslua/taps
@@ -62,4 +62,5 @@ tcp ../dissectors/packet-tcp.h tcp_info_t
 #tls ../dissectors/packet-tls.h ssl_info_t
 #tr ../dissectors/packet-tr.h tr_info_t
 wlan ../dissectors/packet-ieee80211.h wlan_hdr_t
+diameter ../dissectors/packet-diameter.h diam_sub_dis_t
 #wsp ../dissectors/packet-wsp.h wsp_info_t

问题

任何帮助将不胜感激。

提前谢谢你,最好的问候, Jarek

标签: luawiresharkwireshark-dissectordiameter-protocol

解决方案


推荐阅读