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
xxlsnmpnms CLI NMS 管理端工具 被管理设备 自研 Agent / Net-SNMP GET / GETNEXT / SET / GETBULK(UDP 161) TRAP / INFORM(UDP 162)→ traplisten 监听 命令格式与 Net-SNMP 一致,可直接对照迁移 -v 版本 · -c 共同体 · -u 用户 · -a/-A 认证 · -x/-X 加密
图 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 安全模型,认证与加密算法可自由组合:

认证算法加密算法命令示例(关键参数)
MD5DES / AES-a MD5 -A pass -x AES -X pass
SHA1DES / 3DES / AES128-a SHA1 -A pass -x AES128 -X pass
SHA256DES / 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
SNMPv3 USM 三种安全级别 noAuthNoPriv 无认证无加密 仅用户名匹配 适合内网可信环境 authNoPriv 仅认证不加密 MD5/SHA1/SHA256 验证身份防伪造 authPriv 认证+加密 AES128/192/256 跨网段/涉密推荐 推荐配置:SHA256 + AES256(等保合规场景)
图 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 等正确类型标识