用于Diameter 3GPP统计的Lua脚本
我正在尝试创建一个lua脚本来遍历Diameter pcap,收集我感兴趣的信息并生成统计数据 这是部分成功,工作脚本可以在中找到,但我仍然有一些疑问 Field.new()和AVP的多次出现 我正在使用用于Diameter 3GPP统计的Lua脚本,lua,wireshark,wireshark-dissector,diameter-protocol,Lua,Wireshark,Wireshark Dissector,Diameter Protocol,我正在尝试创建一个lua脚本来遍历Diameter pcap,收集我感兴趣的信息并生成统计数据 这是部分成功,工作脚本可以在中找到,但我仍然有一些疑问 Field.new()和AVP的多次出现 我正在使用Field.new()检索AVP,例如: local rrField = Field.new("diameter.3GPP-Reporting-Reason") local toField = Field.new("diameter.CC-Total-Octets") 但是在一个数据包中,AV
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检索到的参考资料。一个很好的例子是结果代码AVP
:
这是一条直径为1的信息,它出现了三次,但结果我只得到了三个2001的数组,没有很好地理解它出现在哪个级别
当单个包包含多个Diameter消息时,情况变得更加混乱。然后我甚至不知道AVP是从哪条消息来的
功能tap。数据包(pinfo、tvb、tapdata)不填充tapdata
另一个想法是深入挖掘tapdata
。如果我理解正确的话,tapdata
(akatapinfo
)应该用解析数据填充,对吗?因此,我应该能够解析消息
但是,无论我如何努力,tapdata
始终未设置(即,零)。在GitHub代码中
tap = Listener.new("diameter", filter)
但我也尝试了第三个参数,将其设置为true
(希望生成所有字段,即使是性能代价)。不走运
[更新2020/03/20]
自动应答功能点击。数据包(pinfo、tvb、tapdata)不填充tapdata
在检查Wireshark(tshark)的源代码后,发现Diameter并没有填充这个变量,因为tapdata并没有对Diameter的引用。我已经尝试将它添加到taps
definition中,并且变量(表)已经填充,甚至哈希的名称也可以。但是散列中的变量不是。。。不管怎样,这里是变化:
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
问题:
- 这种方法正确吗?或者我应该使用其他方法,比如链式解剖器或后解剖器?但我不清楚我是否可以访问到我需要的水平的解剖数据