lua - 来自 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.packet,tapdata
(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
解决方案
推荐阅读
- javascript - 角度单元测试 TypeError:无法读取未定义的属性“订阅”
- c# - 使用 IOption<> 参数化的 Dotnet Core 默认构造函数调用
- angular - 通过对话框组件执行 POST http 请求
- reactjs - 为 onClick 处理程序正确输入 Apollo Mutation 渲染道具
- java - 我可以生成提供输入/输出的哈希函数吗?
- html - 将网页导出为 PDF
- sql-server - 加入 2 个没有共同点的 select 语句
- xamarin - 带有地图标记按钮的 SkiaSharp 地图
- postgresql - PostgreSql 中的完全外连接
- connection - 在 Angular SignalR 中设置集线器连接的查询字符串选项