主要介绍了以下操作:

  1. snmp服务的安装
  2. snmp相关的一些简单操作

Windows下可以开启snmp服务的代理端,不过如果要进行网络管理需要安装专用的nms软件,如果是简单的操作则需要安装net-snmp或者snmputil来实现.
Linux下主要使用到的软件是snmp snmpd snmp-mibs-downloader

系统信息及操作

系统信息:Linux 4.15.0-70-generic #79~16.04.1-Ubuntu SMP x86_64

本地测试

  1. 安装snmp
1
sudo apt-get install snmp snmpd
  1. 查看安装版本
1
2
3
4
5
6
user@flyinfort:~$ snmpd -v

NET-SNMP version: 5.7.3
Web: http://www.net-snmp.org/
Email: net-snmp-coders@lists.sourceforge.net

  1. 启动和查看snmpd服务
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
user@flyinfort:~$ sudo service snmpd start 
user@flyinfort:~$ sudo service snmpd status
● snmpd.service - LSB: SNMP agents
Loaded: loaded (/etc/init.d/snmpd; bad; vendor preset: enabled)
Active: active (running) since 三 2019-11-20 16:36:04 CST; 11s ago
Docs: man:systemd-sysv-generator(8)
Process: 19003 ExecStop=/etc/init.d/snmpd stop (code=exited, status=0/SUCCESS)
Process: 19047 ExecStart=/etc/init.d/snmpd start (code=exited, status=0/SUCCES
CGroup: /system.slice/snmpd.service
└─19053 /usr/sbin/snmpd -Lsd -Lf /dev/null -u snmp -g snmp -I -smux m

11月 20 16:36:04 flyinfort systemd[1]: Starting LSB: SNMP agents...
11月 20 16:36:04 flyinfort snmpd[19047]: * Starting SNMP services:
11月 20 16:36:04 flyinfort snmpd[19051]: /etc/snmp/snmpd.conf: line 145: Warning
11月 20 16:36:04 flyinfort snmpd[19051]: /etc/snmp/snmpd.conf: line 147: Warning
11月 20 16:36:04 flyinfort snmpd[19051]: Turning on AgentX master support.
11月 20 16:36:04 flyinfort systemd[1]: Started LSB: SNMP agents.
11月 20 16:36:04 flyinfort snmpd[19053]: NET-SNMP version 5.7.3
  1. walk命令查看MIB信息库
1
2
user@flyinfort:~$ snmpwalk -v 2c -c public localhost 1.3.6.1.2.1.1.1
iso.3.6.1.2.1.1.1.0 = STRING: "Linux flyinfort 4.15.0-70-generic #79~16.04.1-Ubuntu SMP Tue Nov 12 14:01:10 UTC 2019 x86_64"

在这个命令中localhost之后的一串数字就是我们之前学到的OID,这一个OID:1.3.6.1.2.1.1.1是MIB中对象标识符,在这个对象里面会存储一些跟系统主机相关的一些信息。
在网上会有相关的OID的具体含义的网页,例如: http://www.ttlsa.com/monitor/snmp-oid/可以对应查找

  1. 安装启动trapd监听trap信息
1
2
3
sudo apt-get install snmptrapd

sudo snmptrapd -d -f -Lo

上面命令中的选项表示:
-C : 表示不使用net-snmp默认路径下的配置文件snmptrapd.conf;
-c : 指定snmptrapd.conf文件;
-d : 显示收到和发送的数据报,通过这个选项可以看到数据报文;
-f : 默认情况下,snmptrapd是在后台中运行的,加上这个选项,表示在前台运行;
-L : 指定日志记录在哪里,后面的o表示直接输出到屏幕上,如果是跟着f表示日志记录到指定的文件中;
可通过snmptrapd -h查看命令帮助了解该命令的使用。
6. 本机发送trap信息

1
sudo snmptrap -v1 -c public localhost 1.3.6.1.4.1.1 10.10.12.219 2 3 1000 1.3.6.1.9.9.44.1.2.1 i 12 1.3.4.1.2.3.1 s test_snmptrap

下面是snmpdtrapd接受到的我们发送的trap

1
2
3
4
5
6
7
8
9
10
Received 82 byte packet from UDP: [127.0.0.1]:48964->[127.0.0.1]:162
0000: 30 50 02 01 00 04 06 70 75 62 6C 69 63 A4 43 06 0P.....public.C.
0016: 06 2B 06 01 04 01 01 40 04 0A 0A 0C DB 02 01 02 .+.....@........
0032: 02 01 03 43 02 03 E8 30 29 30 0E 06 09 2B 06 01 ...C...0)0...+..
0048: 09 09 2C 01 02 01 02 01 0C 30 17 06 06 2B 04 01 ..,......0...+..
0064: 02 03 01 04 0D 74 65 73 74 5F 73 6E 6D 70 74 72 .....test_snmptr
0080: 61 70 ap

No access configuration - dropping trap.

网络测试

由于我们之前是在自己本机进行的一些操作,所以现在进行网络测试,网络测试需要对snmpd的配置进行一些修改。

  1. 配置节点
    修改配置文件
1
sudo vim /etc/snmp/snmpd.conf

注意在修改配置文件的时候需要管理员权限。

1
2
view   systemonly  included   .1.3.6.1.2.1.1
view systemonly included .1.3.6.1.2.1.25.1

将上面两句注释掉,注释完了之后,在下面添加新的一句

1
view   systemonly  included   .1

这样子就可以获取更多节点的信息了,我们修改的是对应的OID如果是之前的那两句的意思是只获取那两个的对应的实体的信息。

1
2
3
user@flyinfort:/etc/snmp$ service snmpd restart 
user@flyinfort:/etc/snmp$ snmpwalk -v 2c -c public localhost .1.3.6.1.4.1.2021.4.3.0
iso.3.6.1.4.1.2021.4.3.0 = INTEGER: 8169468

这是查看了一下内存的使用
2. 允许远程主机访问

1
2
3
4
#  Listen for connections from the local system only
agentAddress udp:127.0.0.1:161
# Listen for connections on all interfaces (both IPv4 *and* IPv6)
#agentAddress udp:161,udp6:[::1]:161

snmpd默认的设置是只对本地主机开放的,远程无法获取我们本地的snmp的信息修改config文件使其可以远程访问
将上面的agentAddress udp:127.0.0.1:161注释掉,将agentAddress udp:161,udp6:[::1]:161取消注释即可,然后重新启动snmpd服务
此时最好再次查看确保snmpd服务已经启动。
3. 在windows上开启snmp服务远程获取Linux主机信息
在Windows上开启snmp服务的一般的功能上,控制面板->程序和功能->启用和关闭windows功能->选择snmp服务。可以打开服务面板重启snmp服务。
想要查看我们远程linux主机的MIB信息需要用到其他工具,在这里使用的snmputil(net-snmp在win上安装麻烦些,暂时还没安装成功),支持get walk等命令。在此处查看远程主机的系统信息。可以看到和我们在本地看到的信息是一致的。

1
2
3
4
5
6
7
8
D:\workspace\softwares\snmputil>SNMPUTIL.EXE walk 10.164.222.198 public .1.3.6.1.2.1.1.1
Variable = system.sysDescr.0
Value = String Linux flyinfort 4.15.0-70-generic #79~16.04.1-Ubuntu SMP Tue Nov 12 14:01:10 UTC 2019 x86_64

End of MIB subtree.

D:\workspace\softwares\snmputil>SNMPUTIL.EXE walk 10.164.222.198 public .1.3.6.1.4.1.77.1.2.25.1.1
End of MIB subtree.

环境搭建简介

环境:Linux flyinfort 4.15.0-96-generic #97~16.04.1-Ubuntu SMP Wed Apr 1 03:03:31 UTC 2020 x86_64
在这里使用easysnmp简单演示一下。
easysnmp使用手册:https://easysnmp.readthedocs.io/en/latest/
如果没有net-snmp的话,easysnmp是基于net-snmp的,首先要安装net-snmp。
安装了net-snmp的话直接安装就可以了:

1
sudo apt-get install libsnmp-dev snmp-mibs-downloader

net-snmp下载地址:http://www.net-snmp.org/
按照net-snmp的安装指南安装net-snmp:

  1. Run ./configure
  2. Optionally edit include/net-snmp/net-snmp-config.h
  3. make
  4. Run the next command as root:
  5. make install
  6. configure the agent

根据easysnmp的使用手册安装easysnmp:

1
2
sudo apt-get install gcc python-dev
pip install easysnmp

easysnmp安装完了之后就可以使用easysnmp来进行一些操作了。

1
2
3
from easysnmp import snmp_walk
res = snmp_walk('1.3.6.1.2.1.1.1', hostname='localhost', community='public', version=2)
print(res)
1
[<SNMPVariable value='Linux flyinfort 4.15.0-96-generic #97~16.04.1-Ubuntu SMP Wed Apr 1 03:03:31 UTC 2020 x86_64' (oid='iso.3.6.1.2.1.1.1.0', oid_index='', snmp_type='OCTETSTR')>]

关于更多easysnmp的操作可以在https://easysnmp.readthedocs.io/en/latest/,easysnmp的使用手册上查阅。