xxlsnmpnms 是芯祥联科技自研 NMS 命令行工具。本文基于它与自研 xxl SNMP Agent 的实测对接过程整理:从基础 GET/SET、批量遍历到 SNMPv3 认证加密矩阵、Trap/Inform 告警触发,完整覆盖设备对接验证全流程。命令风格对齐 Net-SNMP(get/set/bulkwalk 对应 snmpget/snmpset/snmpbulkwalk),习惯使用 snmpget/snmpwalk 的工程师可直接迁移。
一、命令风格:对齐 Net-SNMP,零成本迁移
xxlsnmpnms(自研)
xxlsnmpnms get -v 2c -c public IP OID
xxlsnmpnms getnext -v 2c -c public IP OID
xxlsnmpnms set -v 2c -c public IP OID s "value"
xxlsnmpnms bulkwalk -v 2c -c public -Cn0 -Cr8 IP OID
xxlsnmpnms traplisten -p 162
Net-SNMP(对照)
snmpget -v 2c -c public IP OID
snmpgetnext / snmpwalk -v 2c -c public IP OID
snmpset -v 2c -c public IP OID s "value"
snmpbulkwalk -v 2c -c public -Cn0 -Cr5 IP OID
snmptrapd -f -p 162
图 1:xxlsnmpnms(NMS)与自研 Agent(设备端)对接验证模型
二、SNMPv1 基础测试
# 基础连通性(GET 系统描述 / 运行时间)
xxlsnmpnms get -v 1 -c public 192.168.3.230 1.3.6.1.2.1.1.1.0
xxlsnmpnms get -v 1 -c public 192.168.3.230 1.3.6.1.2.1.1.3.0
# GETNEXT 遍历 MIB 树
xxlsnmpnms getnext -v 1 -c public 192.168.3.230 1.3.6.1.2.1.1
# SET 写入可写 OID(如修改系统联系人)
xxlsnmpnms set -v 1 -c private 192.168.3.230 1.3.6.1.2.1.1.4.0 s "test@company.com"
三、SNMPv2c 批量操作
# 一次 GET 多个 OID
xxlsnmpnms get -v 2c -c public 192.168.3.230 1.3.6.1.2.1.1.1.0 1.3.6.1.2.1.1.3.0
# GETBULK 批量遍历(-Cn 非重复数,-Cr 最大重复数)
xxlsnmpnms bulkwalk -v 2c -c public -Cn0 -Cr8 192.168.3.230 1.3.6.1.2.1.1
# 遍历企业私有 MIB(1.3.6.1.4.1.12345)
xxlsnmpnms getnext -v 2c -c public 192.168.3.230 1.3.6.1.4.1.12345.1.1
xxlsnmpnms getnext -v 2c -c public 192.168.3.230 1.3.6.1.4.1.12345.1.2
四、SNMPv3 认证加密矩阵
xxlsnmpnms 完整支持 SNMPv3 USM 安全模型,认证与加密算法可自由组合:
| 认证算法 | 加密算法 | 命令示例(关键参数) |
|---|---|---|
| MD5 | DES / AES | -a MD5 -A pass -x AES -X pass |
| SHA1 | DES / 3DES / AES128 | -a SHA1 -A pass -x AES128 -X pass |
| SHA256 | DES / 3DES / AES128/192/256 | -a SHA256 -A pass -x AES256 -X pass |
| SHA256FULL(libtom 库版) | DES / 3DES / AES128/192/256 | -a SHA256FULL -A pass -x AES256 -X pass |
# 无认证无加密(noAuthNoPriv)
xxlsnmpnms get -v 3 -u testuser -l noAuthNoPriv 192.168.3.230 1.3.6.1.2.1.1.1.0
# 仅认证(authNoPriv,SHA1)
xxlsnmpnms get -v 3 -u v3user -a SHA1 -A "authpass123" -x none 192.168.3.230 1.3.6.1.2.1.1.1.0
# 认证+加密(authPriv,SHA1 + AES128)
xxlsnmpnms get -v 3 -u v3user -a SHA1 -A "authpass123" -x AES128 -X "privpass456" 192.168.3.230 1.3.6.1.2.1.1.1.0
# 高安全组合(SHA256 + AES256)
xxlsnmpnms get -v 3 -u v3user -a SHA256 -A "authpass123" -x AES256 -X "privpass123" 192.168.3.230 1.3.6.1.2.1.1.1.0
图 2:SNMPv3 三种安全级别与推荐配置
五、Trap/Inform 告警监听与接收
新版机制下,Trap/Inform 由 Agent 侧主动上报:设备端业务 APP 通过 agent_snmp_trap_custom() / agent_snmp_inform_custom() 接口,或通过 Agent CLI 的 trap / inform 命令触发上报。NMS 侧只需保持 traplisten 监听即可接收验证:
# 终端 1(NMS 侧):启动 Trap 监听(保持窗口打开)
xxlsnmpnms traplisten -p 162
# 终端 2(Agent 侧):通过 Agent CLI 触发手动上报(或 APP 调用 API)
# Agent CLI: trap 192.168.3.230 ← 手动单发 Trap(可选指定目标 NMS IP)
# Agent CLI: inform 192.168.3.230 ← 手动单发 Inform(等待 NMS 应答)
# (早期版本由 NMS 侧 SET 设备 OID 触发,新版已改为 Agent 侧主动上报)
监听窗口输出示例:
========================================
[TRAP/INFORM] 来源:192.168.3.230:161(版本:v2c)
========================================
安全信息:共同体名 = public
变量数据(共2个):
[1] OID:1.3.6.1.2.1.1.3.0 = TIMETICKS: 45678 (456.78秒)
[2] OID:1.3.6.1.6.3.1.1.4.1.0 = OID: 1.3.6.1.6.3.1.1.5.2(链路恢复陷阱OID)
六、调试与异常排查
# 显示十六进制报文(基础调试)
xxlsnmpnms -v 2c -c public -d 192.168.3.230 1.3.6.1.2.1.1.1.0
# 全流程详细调试信息保存到日志
xxlsnmpnms -v 2c -c public -D all 192.168.3.230 1.3.6.1.2.1.1.1.0 > C:\snmp_debug.log 2>&1
# 检查 161/162 端口占用
netstat -ano -p udp | findstr :161
netstat -ano -p udp | findstr :162
| 异常现象 | 排查方向 |
|---|---|
| 请求超时 | 检查 UDP 161 端口占用、防火墙放行、Agent 是否运行 |
| 认证失败 | 核对 SNMPv3 用户名、认证/加密算法与密码是否与 Agent 配置一致 |
| 无 Trap 接收 | 确认监听端口(默认 162)、Agent 已加载 MIB 模块、SET 已成功执行 |
| 类型不匹配报错 | SET 值类型与 OID 定义不符(如写字符串到 INTEGER 节点),需用 i/u/s 等正确类型标识 |