好的,我是Linux和Monit的新手,所以请耐心等待......
我已配置自定义协议检查以监控远程设备上的端口。远程单元是基于TIA 102.BAHA标准的DFSI设备,其利用UDP进行通信。
在我的monitrc conf文件中,我添加了这个条目......
check HOST DLC-PORT ADDRESS 192.168.100.85
if failed
port 50050 type udp
SEND "\0x00\0x01\0x00\0xED\0xB6\0x73\0xF5\0x3D\0xD7\0x05\0x05"
EXPECT "\0x02\0x01\0x00\0x01\0x00\0x00\0x03\0x01\0xC3\0x64"
then alert
/var/log/monit.log报告此消息......
[PST Jan 5 12:13:41]错误:' DLC-PORT'在IN中失败的协议测试[通用] ET [192.168.100.85:50050]通过UDP - GENERIC:接收意外数据[\ 0 \ 0 \ 0] - 不匹配
我运行了Wireshark跟踪,send命令似乎在数据包中发送了正确的有效负载,而我设备的响应有效负载也匹配了预期的字符串。
日志文件响应消息数据" \ 0 \ 0 \ 0"不是响应包的有效载荷。
我似乎无法弄清楚Monit认为正在接收或格式化我的EXPECTED字符串的响应消息。我已经尝试添加字符串" \ 0 \ 0 \ 0"并将该字符串添加到我预期的结尾并添加所有UDP填充位置。没运气。有任何想法吗?
这是Wireshark的导出,对不起它在这个论坛上看起来很乱。第一帧(40)是SEND,您可以看到我的发送字符串插入到消息中。第二帧(41)是响应,您也可以看到我的EXPECTED字符串也嵌入其中。
没有。时间源目标协议长度信息 40 3.780573 192.168.100.11 192.168.100.85 DFSIControl 60 FSC Connect - 45460→50050 Len = 11
帧40:接线上的60字节(480位),接口0上捕获的60字节(480位)
Ethernet II,Src:HewlettP_3a:de:f0(d0:bf:9c:3a:de:f0),Dst:InsideTe_26:db:a5(00:e0:f4:26:db:a5)
Internet Protocol Version 4,Src:192.168.100.11,Dst:192.168.100.85
用户数据报协议,Src端口:45460(45460),Dst端口:50050(50050)
P25 DFSI控制传送协议 消息ID:0x00 FSC Connect 消息版本:0x01 消息关联标记:0x00 语音传送基本端口(RTP必须均匀):60854 语音传送SSRC标识符:0x73f53dd7 固定电台心跳周期(秒5-255):5 主机心跳周期(秒5-255):5
<00> 0000 00 e0 f4 26 db a5 d0 bf 9c 3a de f0 08 00 45 00没有。时间源目标协议长度信息 41 3.791312 192.168.100.85 192.168.100.11 DFSIControl 60 FSC确认 - 50050→45460 Len = 10
帧41:接口0上的60字节(480位),60字节捕获(480位) 以太网II,Src:InsideTe_26:db:a5(00:e0:f4:26:db:a5),Dst:HewlettP_3a:de:f0(d0:bf:9c:3a:de:f0)
Internet Protocol Version 4,Src:192.168.100.85,Dst:192.168.100.11
用户数据报协议,Src端口:50050(50050),Dst端口:45460(45460)
P25 DFSI控制传送协议 消息ID:0x02 FSC确认 消息版本:0x01 已确认的消息ID:0x00(FSC连接ACK / NAC) 已确认的消息版本:0x01 已确认的消息关联标记:0x00 响应代码:0x00(一般确认) 响应数据长度:0x03 响应版本:1 语音传送基本端口(对于RTP必须是偶数):50020
0000 d0 bf 9c 3a de f0 00 e0 f4 26 db a5 08 00 45 88
0010 00 26 c8 75 40 00 40 11 28 18 c0 a8 64 55 c0 a8
0020 64 0b c3 82 b1 94 00 12 78 99 02 01 00 01 00 00
0030 03 01 c3 64 00 00 00 00 00 00 00 00
更新:我想出了如何启用非常详细的日志记录并从日志文件中的CHECK中捕获此信息。
PST 1月5日15:20:27]调试:&#39; DLC-PORT&#39;通过UDP
成功连接到INET [192.168.100.85:50050]PST 1月5日15:20:27] debug:GENERIC:已成功发送:&#39; \ 0x00 \0x00▒s▒=▒&#39;
PST 1月5日15:20:27]错误:&#39; DLC-PORT&#39; INET [192.168.100.85:50050]通过UDP进行失败的协议测试[通用] - GENERIC:接收意外数据[\ 0 \ 0 \ 0] - 不匹配
PST 1月5日15:20:27] debug:------------------------------------ -----------
PST 1月5日15:20:27] debug:monit()[0x41b83b]
PST 1月5日15:20:27] debug:monit(LogError + 0xb6)[0x41c1c6]
PST 1月5日15:20:27] debug:monit(Event_post + 0x214)[0x418284]
PST 1月5日15:20:27] debug:monit()[0x42a805]
PST 1月5日15:20:27] debug:monit(check_remote_host + 0x12b)[0x42cacb]
PST 1月5日15:20:27] debug:monit(validate + 0x2b6)[0x42ae76]
PST 1月5日15:20:27] debug:monit(main + 0x482)[0x40ba72]
PST 1月5日15:20:27] debug:/lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0xf5)[0x7f29415d4b45]
PST 1月5日15:20:27] debug:monit()[0x40bd41]