菜鸟科技网

snmp trap命令

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

snmp trap命令-图1
(图片来源网络,侵删)
  • SNMP Trap 是一种消息:它是 SNMP 协议中的一种异步通知机制,由 SNMP 代理在特定事件发生时,主动“推送”给 SNMP 管理站的消息,它是一种“推送”模式,而不是管理站“轮询”代理的模式。

当人们谈论“SNMP trap 命令”时,通常指的是以下几种情况:

  1. 在设备上配置 Trap 发送:在路由器、交换机、服务器等网络设备上,启用 Trap 功能并指定管理站地址。
  2. 在管理站上配置 Trap 接收:在监控平台(如 Zabbix, Nagios, PRTG, SolarWinds 等)上,配置一个端口来监听并接收来自设备的 Trap 消息。
  3. 测试或发送一个 Trap:使用工具手动生成一个 Trap 消息,用于测试配置是否正确。

下面我将围绕这三种情况,结合具体命令和工具进行详细说明。


在网络设备上配置发送 SNMP Trap

这是最常见的场景,你需要在被监控的设备(如 Cisco 路由器)上进行配置,让它知道在发生某些事件时,应该把 Trap 发送给谁。

思科设备配置示例

以下是在思科 IOS 设备上配置 SNMP Trap 的基本步骤。

snmp trap命令-图2
(图片来源网络,侵删)

步骤 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命令-图3
(图片来源网络,侵删)
! 启用所有标准的 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.1coldStart 的 OID。
  • 一个空的变量绑定列表。
  • '1.3.6.1.2.1.1.1.0' s "Test trap message from my server': 这是附加的变量绑定,它表示在 Trap 的变量绑定部分,添加一个 sysDescr.0 (OID 3.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 的“推送”特性是掌握它的关键,它不是“拉取”数据,而是设备在事件发生时“通知”管理站,这使得网络监控更加实时和高效。

分享:
扫描分享到社交APP
上一篇
下一篇