SNMP

Net-SNMP 是什么?

  NET-SNMP 是一种开放源代码的 SNMP 实现。它支持 SNMP v1, SNMP v2c 与 SNMP v3,并可以使用 IPV4 及 IPV6 。也包含 SNMP Trap 的所有相关实现。

ArchWiki Snmpd

Net-SNMP 包括哪些功能?

命令行应用程序

  • 从支持 SNMP 的设备检索信息,使用单个请求(snmpget,snmpgetnext),或者使用多个请求(snmpwalk、snmptable、snmpdelta)

  • 操作支持 SNMP 的设备(snmpset)上的配置信息

  • 从支持 SNMP 的设备(snmpdf、snmpnetstat、snmpstatus)检索一个固定的信息集合

  • 在 MIB/OI 的数值形式和文本形式之间进行转换,并显示 MIB 内容和结构(snmptranslate)

图形MIB浏览器 (Tkmib) 使用 Tk/perl

用于接收 SNMP 通知(Snmpd)的守护进程(Systemd deamon) 可以选择的通知(到 Syslog、NT 事件日志或纯文本文件) 转发到另一个 SNMP 管理系统或传递到外部应用程序

用于响应 SNMP 查询以获取有关管理信息(Snmpd) 的可扩展代理 这包括对各种 MIB 信息模块的内置支持,并且可以使用动态加载的模块、外部脚本和命令以及 SNMP 多路复用(Smux)和代理扩展性(AgentX)协议进行扩展。

用于开发具有 C 和 perl API 的新 SNMP 应用程序的库

安装 (通过包管理器)

Arch-Linux / Manjaro :

$ sudo pacman -Sy net-snmp

Ubuntu / Debian GNU/Linux :

$ sudo apt-get install -y net-snmp libperl-dev

CentOS :

$ sudo yum install -y net-snmp net-snmp-devel net-snmp-libs net-snmp-perl net-snmp-utils mrtg

部署 (通过源码编译)

安装 GNU GCC 编译器

下载源码

  执行文件目录下的 configure 可执行文件,如果想指定程序包的安装路径,那么首先建立相应的文件夹来存放安装信息,可以写成 ./configure --prefix= 指定的路径名。参数 --prefix 用来告诉系统安装信息存放的路径,如果没有指定路径直接执行 ./configure,那么程序包都会安装在系统默认的目录下,通常为 /usr/local 或者 /opt下

例如 :

$ sudo ./configure --prefix=/usr/local/snmp

可以加入支持磁盘I/O监控等等功能

$ sudo ./configure --prefix=/usr/local/snmp --with-mib-modules='ucd-snmp/diskio ip-mib/ipv4InterfaceTable'

在配置过程中需要进行一些简单的选择 :

default version of-snmp-version: 2 
Systemcontact information: yourname                                       配置该设备的联系人
System location: china                                                    该设备的位置
Location to write logfile: /var/log/snmpd.log                             日志文件位置
Location to Write persistent: /var/net-snmp                               数据存储目录

编译并且安装 :

$ sudo make && sudo make install

Snmpd 基本配置

/etc/snmp/snmpd.conf

配置只读字符串

$ sudo echo "rocommunity read_only_community_string" >> /etc/snmp/snmpd.conf

添加另一个用于管理的社区字符串

$ sudo echo "rwcommunity read_write_community_string" >> /etc/snmp/snmpd.conf

SNMP v3增加了安全性和加密的身份验证使用不同的配置方案 /var/net-snmp/snmpd.conf

$ sudo echo "rouser read_only_user" >> /etc/snmp/snmpd.conf

或使用向导

$ sudo snmpconf -g basic_setup

配置 /var/net-snmp/snmpd.conf

$ sudo echo "createUser read_only_user SHA password1 AES password2" >> /var/net-snmp/snmpd.conf

或使用配置工具

$ sudo net-snmp-create-v3-user -ro -a SHA -x AES

Start Systemd Deamon

$ sudo systemctl enable snmpd.service
$ sudo systemctl start snmpd.service

检查 Systemd 进程状态

$ sudo systemctl status snmpd.service

Testing

$ sudo snmpwalk -v 1 -c read_only_community_string localhost | less                                              SNMP v1
$ sudo snmpwalk -v 2c -c read_only_community_string localhost | less                                             SNMP v2c
$ sudo snmpwalk -v 3 -u read_only_user -a SHA -A password1 -x AES -X password2 -l authNoPriv localhost | less    SNMP v3

不论哪种方式,下方会显示本机 MIB 信息

从设备检索信息

snmpget 与 snmpwalk 的区别

  • snmpwalk 是对OID值的遍历

  若某个OID值下面有N个节点,则依次遍历出这N个节点的值。如果对某个叶子节点的 OID 值做walk,则取得到数据就不正确了,因为它会认为该节点是某些节点的父节点,而对其进行遍历,而实际上该节点已经没有子节点了,那么它会取出与该叶子节点平级的下一个叶子节点的值,而不是当前请求的节子节点的值

比如

$ sudo snmpwalk -v 2c -c read_only_community_string localhost | less
$ sudo snmpwalk -v 2c -c read_only_community_string localhost system  
  • snmpget 是取具体的OID的值。

snmpget 适用于OID值是一个叶子节点的情况, 而且可以同时查询多个 OID 的值

$ sudo snmpget -v 2c -c read_only_community_string localhost sysDescr.0 sysLocation.0

snmpgetnext

  模拟SNMP GETNextRequest 动作的工具,用来获取一个管理信息实例的下一个可用实例数据

$ sudo snmpgetnext -v 2c -c read_only_community_string localhost sysDescr.0

设置设备信息

snmpset

  模拟SNMP SETRequest 动作的工具,用来设置可写管理信息,一般用来配置设备对设备执行操作

$ sudo snmpset -v 2c -c read_write_community_string localhost sysContact.0 s netlab
$ sudo snmpset -v 2c -c read_write_community_string localhost sysName.0 s ccut sysLocation.0 s soft

SnmpTrap 的发送和接收

虽然 SNMPTrap SNMPTrapd 和 SNMPInform 功能模块在 Net-SNMP 源码包里。但是 Ubuntu 和 Pop! OS 等发行版将这部分功能单独提供了 binary 软件包

Ubuntu :

$ sudo apt-get install -y snmptrapd

Ubuntu 20.04 LTS     Ubuntu Launchpad

  • snmptrap:可以模拟snmp agent发送一个trap到snmp管理端

  • snmpinform:可以模拟snmp agent发送一个inform request到snmp管理端

  Trap是发送给SNMP管理者的通知网络状况等的警告消息,而Inform是需要SNMP管理者确认接收的Trap。与Inform 相比较,Trap通知方式为不可靠传输,因为snmp管理端在收到一条Trap通知后无需回复任何确认信息,所以snmp agent无法知道Trap通知是否已经被snmp管理端正确接收

  • snmptrapd:一个模拟snmp管理端接收trap/inform通知的程序

snmptrapd 应用程序作为后台 SNMP Trap 服务器,负责接收被管理设备发送过来的 Trap 消息

创建snmptrapd.conf 的配置文件

$ sudo nano /etc/snmp/snmptrapd.conf

traphandle default lognotify IBM-DW-SAMPLE::nodeDown 
authCommunity log,execute,net public

创建 snmptrapd 进程

$ sudo snmptrapd -C -c /etc/snmp/snmptrapd.conf udp:1632 -df -Lo

发送SNMP v1版本trap报文的方法

$ sudo snmptrap -v 1 -c read_write_community_string 192.168.16.46  1.3.6.1.4.1.1  192.168.16.46  2  3  1000  1.3.6.1.9.9.44.1.2.1  i  12  1.3.4.1.2.3.1  s  test

命令   Snmp协议版本   共同体   Snmp管理端IP   Enterprise-OID   Snmp代理IP   Trap类型   Trap特征码   uptime   被发送参数的OID   数据类型   数据值   被发送参数的OID   数据类型   数据值

发送SNMP v2c 版本trap报文的方法

$ sudo snmptrap -v 2c -c read_write_community_string 192.168.16.46  1.3.6.1.4.1.1  SNMPv2-MIB::sysLocation.0  s  test

命令   Snmp协议版本   共同体   Snmp管理端IP   Enterprise-OID   数据OID   数据类型   数据值

发送一个 Inform Request

$ sudo snmpinform
全部评论

相关推荐

昨天 14:22
门头沟学院 Java
大厂 测开 24*16离家近的事业编(大概只有大厂的1/4) 硕士
点赞 评论 收藏
分享
11-09 14:54
已编辑
华南农业大学 产品经理
大拿老师:这个简历,连手机号码和照片都没打码,那为什么关键要素求职职位就不写呢? 从上往下看,都没看出自己到底是产品经理的简历,还是电子硬件的简历? 这是一个大问题,当然,更大的问题是实习经历的描述是不对的 不要只是去写实习流程,陈平,怎么去开会?怎么去讨论? 面试问的是你的产品功能点,是怎么设计的?也就是要写项目的亮点,有什么功能?这个功能有什么难处?怎么去解决的? 实习流程大家都一样,没什么优势,也没有提问点,没有提问,你就不得分 另外,你要明确你投的是什么职位,如果投的是产品职位,你的项目经历写的全都是跟产品无关的,那你的简历就没用 你的面试官必然是一个资深的产品经理,他不会去问那些计算机类的编程项目 所以这种四不像的简历,在校招是大忌
点赞 评论 收藏
分享
头像
11-09 17:30
门头沟学院 Java
TYUT太摆金星:我也是,好几个华为的社招找我了
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务