实验前准备
编译SNMP相关固件到NetStudio中
在make menuconfig中选择Network –> mini_snmpd,进行编译
其他包,如snmptrapd等,在make menuconfig中输入‘/’,进行搜索,查看具体路径并勾选

安装SNMP相关工具
Linux中安装
确保客户端安装了 snmp
工具集(如 Linux 上的 net-snmp
包):
1 2
| sudo apt install snmp sudo yum install net-snmp-utils
|
Windows中安装
使用Net-SNMP官方预编译好的安装包进行安装。传送门
开始实验
基本实验
查看系统描述信息(sysDescr)
1
| snmpget -v2c -c public 192.168.1.1 SNMPv2-MIB::sysDescr.0
|
-v2c
:使用 SNMP v2c 协议
-c public
:社区字符串,默认为 public
192.168.1.1
:OpenWrt 设备的 IP 地址
sysDescr.0
:获取系统描述
使用 snmpwalk
获取一整类信息(例如系统信息)
1
| snmpwalk -v2c -c public 192.168.1.1 system
|
获取接口状态(ifTable)
1
| snmpwalk -v2c -c public 192.168.1.1 ifTable
|
可以查看:
- 接口索引(ifIndex)
- 接口名称(ifDescr)
- 接口状态(ifOperStatus)
- 接口流量(ifInOctets、ifOutOctets)

路由器性能监控
获取系统运行时间
1
| snmpget -v2c -c public 192.168.10.1 .1.3.6.1.2.1.1.3.0
|
获取内存使用情况
1
| snmpwalk -v2c -c public 192.168.10.1 .1.3.6.1.4.1.2021.4
|
会返回:
memTotalReal
:总内存
memAvailReal
:可用内存
memBuffer
、memCached
等
获取接口流量
列出所有接口:
1
| snmpwalk -v2c -c public 192.168.10.1 .1.3.6.1.2.1.2.2.1.2
|
显示如:
1
| IF-MIB::ifDescr.1 = STRING: bridge-lan
|
查询接口流量(以 bridge-lan 为例,如果是第1个接口):
1 2
| snmpget -v2c -c public 192.168.10.1 .1.3.6.1.2.1.2.2.1.10.1 snmpget -v2c -c public 192.168.10.1 .1.3.6.1.2.1.2.2.1.16.1
|

SNMP Trap实验
SNMP Trap 是由设备(如 OpenWrt 路由器)主动发送给管理端(如你的电脑)的 通知消息,通常用于:
- 接口断开或连接
- 高温、过载等告警
- 自定义脚本事件(比如用户连接WiFi时触发)
实验步骤:
修改snmpd配置
编辑 /etc/snmp/snmpd.conf
,添加以下内容:
1
| trap2sink 192.168.10.5 public
|
说明:
192.168.10.100
是你运行 snmptrapd
的电脑的 IP 地址
public
是社区字符串
保存并重启服务1
| /etc/init.d/snmpd restart
|
在PC上运行Trap接收器
首先创建配置文件snmptrapd.conf
在任意路径下创建文件,写入如下内容:
1
| authCommunity log,execute,net public
|
说明:允许社区字符串为 public
的 Trap 被接受、记录和执行动作。
启动监听
1
| snmptrapd.exe -f -Lo -c "C:\Users\hasong\Desktop\snmp\snmptrapd.conf"
|
-f
:前台运行
-Lo
:日志输出到控制台
-c
:指定配置文件路径(视安装而定)
此时 Windows 正在监听默认 Trap 端口 UDP 162
从NetStudio发送Trap
1
| snmptrap -m "" -v 2c -c public 192.168.10.5 '' .1.3.6.1.6.3.1.1.5.1
|
会在windows上看到输出:
1
| DISMAN-EVENT-MIB::sysUpTimeInstance = Timeticks: (216751) 0:36:07.51 SNMPv2-MIB::snmpTrapOID.0 = OID: SNMPv2-MIB::coldStart
|
表示设备冷启动。

也可以用更多的Trap命令:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| snmptrap -m "" -v 2c -c public 192.168.10.114 '' .1.3.6.1.6.3.1.1.5.2
snmptrap -m "" -v 2c -c public 192.168.10.114 '' .1.3.6.1.6.3.1.1.5.3 \ .1.3.6.1.2.1.2.2.1.1 i 3
snmptrap -m "" -v 2c -c public 192.168.10.114 '' .1.3.6.1.6.3.1.1.5.4 \ .1.3.6.1.2.1.2.2.1.1 i 3
snmptrap -m "" -v 2c -c public 192.168.10.114 '' .1.3.6.1.6.3.1.1.5.5
snmptrap -m "" -v 2c -c public 192.168.10.114 '' .1.3.6.1.4.1.9999.1.1 \ .1.3.6.1.4.1.9999.1.1.1 s "NetStudio CPU too high"
snmptrap -m "" -v 2c -c public 192.168.10.5 '' .1.3.6.1.4.1.9999.2.1 \ .1.3.6.1.4.1.9999.2.1.1 s "High temp alert" \ .1.3.6.1.4.1.9999.2.1.2 i 78
|
编写自定义脚本,达到特定条件时触发
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| #!/bin/sh
# === 配置部分 === TRAP_TARGET="192.168.10.114" # SNMP Trap 接收器 IP COMMUNITY="public" ENTERPRISE_OID=".1.3.6.1.4.1.9999"
# === 1. 检查可用内存(单位:kB)=== MEM_FREE=$(grep MemFree /proc/meminfo | awk '{print $2}') if [ "$MEM_FREE" -lt 20480 ]; then snmptrap -m "" -v 2c -c "$COMMUNITY" $TRAP_TARGET '' "$ENTERPRISE_OID.1.1" \ "$ENTERPRISE_OID.1.1.1" s "Low Memory Alert" \ "$ENTERPRISE_OID.1.1.2" i "$MEM_FREE" fi
# === 2. 检查接口状态(br-lan)=== IF_STATUS=$(cat /sys/class/net/br-lan/operstate 2>/dev/null) if [ "$IF_STATUS" != "up" ]; then snmptrap -m "" -v 2c -c "$COMMUNITY" $TRAP_TARGET '' "$ENTERPRISE_OID.2.1" \ "$ENTERPRISE_OID.2.1.1" s "Interface br-lan is down" fi
|
示例脚本,当 内存可用小于 20MB 或 接口 br-lan down 时,发送 SNMP Trap 到服务器。
你可以扩展这个脚本来做:
- 检查系统负载(
uptime
的 1 分钟平均值)
- 检测 Ping 网关失败时报警
- 检测登录用户数量、连接设备等