Linux系统安装NET-SNMP,自定义MIB节点实现Get、Set操作
环境
net-snmp : 5.9.1
Linux : Ubuntu 16.04
安装 Net-SNMP
从 Net-SNMP官网下载最新源码net-snmp-5.9.1.tar.gz
解压
$ tar -xvzf net-snmp-5.9.1.tar.gz
进入文件夹
$ cd net-snmp-5.9.1/
配置安装位置
$ ./configure --prefix=/usr/local/snmp
## 配置使用默认选项,一路回车
configure文件用于工程自动配置,修改参数可以定制配置内容,此处修改安装目录。
./configure参数 | 含义 |
---|---|
–prefix=/usr/local | net snmp的安装路径 |
–enable-mfd-rewrites | 允许新的mfd重写可用的mid模块 |
–with-default-snmp-version=“3” | 默认的snmp版本 |
–with-sys-contact="name,E_mail:maileaddress " | 该设备的联系人 |
–with-sys-location=“China” | 该设备的位置 |
–with-logfile="/var/log/snmpd.log" | 日志文件路径 |
–with-persistent-directory="/var/net-snmp" | 不变数据存储目录 |
安装依赖环境
$ sudo apt-get install libperl-dev
编译
$ sudo make
安装
$ sudo make install
复制配置文件到安装目录
$ sudo cp EXAMPLE.conf /usr/local/snmp/share/snmp/snmpd.conf
修改配置文件
$ sudo vim /usr/local/snmp/share/snmp/snmpd.conf
监听网络中其他ipv4地址的请求
添加下面第一行view systemonly include .1
(使所有节点都可操作)
修改权限,将rocommunity改为rwcommunity(否则无法使用set功能)
在sbin目录下运行snmpd
/usr/local/snmp/sbin$ sudo ./snmpd
如果执行失败,程序直接退出了,可以使用$ sudo ./snmpd -f -Le
来查看错误信息,也可直接执行该命令运行snmpd。若执行失败,需杀死刚才执行的命令后再重新运行,具体方法见文末。
-f :do not fork from the shell不从shell派生子进程;
-L : toggle options controlling where to log to切换到相关的日志控制,它后面需要跟参数;
e:log to standard error 日志到标准错误。
使用$ sudo ./snmpd -f -Le
后保持终端不退出,snmpd进程将持续运行
在net-snmp安装目录下bin目录,测试SNMP命令
## 遍历MIB树
/usr/local/snmp/bin$ ./snmpwalk -v2c -c public localhost
## 查看某一个MIB节点
/usr/local/snmp/bin$ ./snmpget -v2c -c public 127.0.0.1 sysUpTime.0
自定义mib节点及处理脚本
官网给出了三种方式。本文使用pass自定义节点。
修改配置文件
/usr/local/snmp/share/snmp$ vim snmpd.conf
文件中给出了模板,按需添加,自定义节点应在enterprises(1.3.6.1.4.1)
新建脚本
~$ vim devid.sh
#!/bin/bash
opt=$1
oid=$2
# -g: get
# -n: getnext
# -s: set
if [[ $opt == "-g" || $opt == "-n" ]]; then
echo $oid
echo "string"
echo "$(</home/qiushan/devid.log)"
elif [[ $opt == "-s" ]]; then
if [[ $3 != "string" ]]; then
echo "wrong-type"
else
echo $4 >/home/qiushan/devid.log
fi
fi
exit 0
添加可执行权限
$ sudo chmod a+x devid.sh
重启snmpd
由于修改了配置文件,需重启。
若使用sudo ./snmpd
方式启动snmpd。使用如下方式重启snmpd。
- 查看进程:
ps -ef |grep snmpd
- 杀死进程:
$ sudo kill -9 107909
若使用/usr/local/snmp/sbin$ sudo ./snmpd -f -Le
方式启动的snmpd,
Ctrl + c退出进程重新启动snmpd即可。
进行测试
/usr/local/snmp/bin$ ./snmpset -v2c -c public localhost .1.3.6.1.4.1.100.1 string 120
/usr/local/snmp/bin$ ./snmpget -v2c -c public localhost .1.3.6.1.4.1.100.1
附录
查看服务:$ ps -ef |grep snmpd
杀死进程:$ sudo kill -9 107909
查看端口使用情况:$ netstat -ntulp |grep 161
netstat命令各个参数说明如下:
命令参数 | 含义 |
---|---|
-t | (tcp)仅显示TCP相关选项 |
-u | (UDP)仅显示UDP相关选项 |
-l | 仅显示监听套接字(所谓套接字就是使应用程序能够读写与收发通讯协议(protocol)与资料的程序) |
-p | 显示进程标识符和程序名称,每一个套接字/端口都属于一个程序。 |
-n | 不进行DNS轮询,显示IP(可以加速操作),拒绝显示别名,能显示数字的全部转化为数字 |