SNMP Trap 本身不是一个像 ping 或 traceroute 那样可以直接在终端上输入并执行的命令。

- SNMP Trap 是一种消息:它是 SNMP 协议中的一种异步通知机制,由 SNMP 代理在特定事件发生时,主动“推送”给 SNMP 管理站的消息,它是一种“推送”模式,而不是管理站“轮询”代理的模式。
当人们谈论“SNMP trap 命令”时,通常指的是以下几种情况:
- 在设备上配置 Trap 发送:在路由器、交换机、服务器等网络设备上,启用 Trap 功能并指定管理站地址。
- 在管理站上配置 Trap 接收:在监控平台(如 Zabbix, Nagios, PRTG, SolarWinds 等)上,配置一个端口来监听并接收来自设备的 Trap 消息。
- 测试或发送一个 Trap:使用工具手动生成一个 Trap 消息,用于测试配置是否正确。
下面我将围绕这三种情况,结合具体命令和工具进行详细说明。
在网络设备上配置发送 SNMP Trap
这是最常见的场景,你需要在被监控的设备(如 Cisco 路由器)上进行配置,让它知道在发生某些事件时,应该把 Trap 发送给谁。
思科设备配置示例
以下是在思科 IOS 设备上配置 SNMP Trap 的基本步骤。

步骤 1:启用 SNMP 服务
enable configure terminal
步骤 2:配置 SNMP 团队
团体字符串类似于密码,用于认证 SNMP 消息,为了安全,建议使用 v3,但 v2c 在配置上更简单。
! 使用 SNMPv2c 配置一个名为 "public_ro" 的只读团体 snmp-server community public_ro RO ! 或者使用更安全的 SNMPv3 (需要先创建用户) ! snmp-server user myuser v3 auth sha MyAuthPassword priv aes 128 MyPrivPassword
步骤 3:指定 SNMP 管理站的 IP 地址
! 允许来自管理站 192.168.1.100 的 SNMPv2c 请求 snmp-server host 192.168.1.100 public_ro
步骤 4:启用需要监控的 Trap 类型 这是最关键的一步,你需要告诉设备在什么情况下发送 Trap。

! 启用所有标准的 SNMP Trap (如 linkUp/linkDown, coldStart 等) snmp-server enable traps ! 启用特定的 Trap, ! 启用链路状态变化 Trap (接口 UP/DOWN) snmp-server enable traps snmp linkdown snmp-server enable traps snmp linkup ! 启用 CPU/内存阈值 Trap (如果设备支持) snmp-server enable traps envmon ! 启用配置变更 Trap snmp-server enable traps config
步骤 5:保存配置
end write memory
配置总结:
通过以上配置,当这台 Cisco 设备的任何一个接口状态发生改变(从 UP 变为 DOWN 或反之),它就会主动向 168.1.100 发送一个 SNMP Trap 消息,消息中会包含是哪个接口发生了变化。
在管理站上配置接收 SNMP Trap
管理站(如 Zabbix)通常有图形化界面来配置 Trap 接收,但它们本质上也是在监听一个 UDP 端口(默认为 162)。
使用 snmptrap 命令行工具手动接收
在 Linux 或 macOS 系统上,有一个强大的工具 net-snmp 包,它提供了一个 snmptrap 命令来接收 Trap。
安装 net-snmp 工具 (如果未安装)
# CentOS/RHEL sudo yum install net-sn-utils # Ubuntu/Debian sudo apt-get install snmp
启动 Trap 监听 在管理站上,打开一个终端,执行以下命令来监听来自任何设备的 Trap:
# 监听所有网络接口的 162 端口 sudo snmptrap -v 2c -c public localhost:162
-v 2c: 指定使用 SNMPv2c 协议。-c public: 指定接收 Trap 时期望的团体字符串(必须与设备上配置的匹配)。localhost:162: 在本机的 162 端口上监听,如果你想接收远程设备的 Trap,请将localhost换成管理站的实际 IP 地址,并确保防火墙允许 162 端口的 UDP 入站流量。
执行结果: 当配置了 Trap 的设备发送消息时,这个终端会实时打印出 Trap 的详细信息,包括发送方 IP、Trap OID(对象标识符)、变量绑定等。
测试 SNMP Trap (手动发送)
当你配置完设备和接收端后,需要验证配置是否正确,这时就需要手动发送一个 Trap。
使用 snmptrap 命令行工具手动发送
同样,我们使用 net-snmp 包中的 snmptrap 命令,但这次是作为“发送方”来使用。
语法
snmptrap -v 2c -c <团体字符串> <目标管理站IP>:<端口> <EngineID> <Trap-OID> [参数]
示例:
假设你想从你的本地 Linux 机器(模拟一个设备)向管理站 168.1.100 发送一个自定义的 "coldStart" Trap。
sudo snmptrap -v 2c -c public 192.168.1.100 \
"" \
1.3.6.1.6.3.1.1.5.1 \ -- SNMPv2-MIB::coldStart.0 (这是标准的 Trap OID)
'' \
'1.3.6.1.2.1.1.1.0' s "Test trap message from my server" -- sysDescr.0
命令解析:
sudo snmptrap: 以 root 权限运行,因为通常需要绑定 1024 以下的端口。-v 2c -c public: 使用 SNMPv2c 和团体字符串 "public"。168.1.100: 目标管理站的 IP 地址。- 引擎 ID,通常留空即可。
3.6.1.6.3.1.1.5.1: 这是关键,它指定了要发送的 Trap 类型。3.6.1.6.3.1.1.5.1是coldStart的 OID。- 一个空的变量绑定列表。
'1.3.6.1.2.1.1.1.0' s "Test trap message from my server': 这是附加的变量绑定,它表示在 Trap 的变量绑定部分,添加一个sysDescr.0(OID3.6.1.2.1.1.1.0) 的值,类型是s(String),内容是后面的字符串。
如果你在管理站(168.1.100)上运行了 snmptrap 监听命令,你就会看到这条手动发送的 Trap 消息被成功接收。
| 场景 | 目标 | 关键工具/命令 | 说明 |
|---|---|---|---|
| 设备配置 | 让设备发送 Trap | snmp-server host, snmp-server enable traps (Cisco IOS) |
在路由器、交换机等设备上配置,定义发送规则和接收方。 |
| 管理站配置 | 让管理站接收 Trap | snmptrap (监听模式), 或监控平台的 GUI |
在监控服务器上开启一个 UDP 162 端口来“监听” Trap。 |
| 测试验证 | 手动发送一个 Trap | snmptrap (发送模式) |
使用命令行工具模拟设备发送 Trap,用于测试接收端是否正常工作。 |
理解 SNMP Trap 的“推送”特性是掌握它的关键,它不是“拉取”数据,而是设备在事件发生时“通知”管理站,这使得网络监控更加实时和高效。
