SNMP协议详细介绍及SNMP监控LXD端口流量

一、SNMP概述

1.1 SNMP原理


网络设备越来越多,网络规模越来越大,管理这些设备也越来越重要。远程管理网络的需求日益迫切,SNMP 应运而生。SNMP即"简单网络管理协议",用于网络管理的协议,用于网络设备的管理。

SNMP被设计为工作在TCP/IP协议族上,SNMP基于TCP/IP协议工作,对网络中支持SNMP协议的设备进行管理,但是SNMP本身工作在应用层。

SNMP协议主要由三大部分构成:SNMP管理实体、多个SNMP被管理实体以及网络管理协议

  • 管理实体:运行再在网络管理工作站上,网络管理员通过管理实体和网络设备打交道
  • 被管理设备:网络设备实体,每个设备中运行SNMP代理(Agent)
  • 网络管理协议:管理实体和被管理设备之间的通信规范,包括MIBSMISNMP本身
    在这里插入图片描述

1.2 MIB


被管理对象值的集合称之为MIB,定义了数据格式、类型、顺序、意义等,使用SMI中定义的类型和ASN.1中的基本类型对对象进行描述,是一个使用SMI描述的管理信息库。

国际化标准组织提出ASN.1【解释:高级的数据描述语言,描述数据的类型、结构、组织、及编码方法,包括符号和语法两部分】来标识MIB模块和其对象。

MIB中的每个节点都具有唯一的OID(Object Identifier),按照从根节点开始的分支结构排列,OID是一个由数字组成的序列,用于唯一标识MIB中的每个节点,用来获取网络设备的信息
在这里插入图片描述

1.3 SMI


SMI是一种数据定义语言,用于定义MIB及其对象,例如定义基本数据类型,对象模型,以及基本编码规则。

1.3.1 基本数据类型

为了保证简单,只定义了十一种基本数据类型
在这里插入图片描述

1.3.2 对象模型

也称之为OBJECT-TYPE,定义被管对象的数据类型、状态和语义

就是封装一个对象来描述被管理对象的信息

被管理对象名称 OBJECT-TYPE{被管理对象的属性的基本数据类型被管理对象的读、写、创建权限被管理对象的当前状态(包括合法的、过时的、强制的)被管理对象的描述信息被管理对象的可被查询的OID位置
}

例如:封装对象sysUpTime

sysUpTime OBJECT-TYPE{# 数据类型:时间SYNTAX TiméTicks# 权限:只读ACCESS read-only# 状态:强制的STATUS mandatory# 描述信息DESCRIPTION"The time (in hundredths of a second) since the network management protio of the system was last re-initialized."# OID位置:system下第3个分支位置::= {system 3}
}
1.3.3 基本编码规则

采用TLV编码规则,TLVASN.1下的一种可变的格式,其中:

  • T 表示数据类型
  • L 定义数值的长度
  • V 表示实际的数值

img

下图所示为ASN.1的常见数据类型

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rLdmSZ8J-1682386305535)(C:\Users\29973\AppData\Roaming\Typora\typora-user-images\image-20230423165932473.png)]

例如实现编码:路由器router的接口数量为15,其中15的ASCIIf

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-m1CUupyQ-1682386305536)(C:\Users\29973\AppData\Roaming\Typora\typora-user-images\image-20230423171025527.png)]

1.4 SNMP


负责在管理实体和被管理实体之间传输MIB条信息的通信协议

常见的有以下三个操作,要注意PDU通常是使用UDP报文传输

PDU类型方向描述信息
GetRequest管理者 -> 被管理者读取网络设备的状态信息
SetRequest管理者 -> 被管理者远程配置网络设备参数
Trap被管理者 -> 管理者向管理者报告异常事件

1.5 常见OID


下面是获取系统信息的常见OID简写以及对应的数字串

简写对应数字串涵义
sysDescr1.3.6.1.2.1.1.1设备描述符
sysUpTime1.3.6.1.2.1.1.3设备运行时间
sysName1.3.6.1.2.1.1.5设备名称

下面是监控网络的常见OID简写以及对应的数字串

简写对应数字串涵义
ifDescr1.3.6.1.2.1.2.2.1.2接口描述符
ifType1.3.6.1.2.1.2.2.1.3接口类型
ifSpeed1.3.6.1.2.1.2.2.1.5接口速率
ifPhysAddress1.3.6.1.2.1.2.2.1.6接口物理地址
ifInOctets1.3.6.1.2.1.2.2.1.10接口输入字节数
ifOutOctets1.3.6.1.2.1.2.2.1.16接口输出字节数
ifInErrors1.3.6.1.2.1.2.2.1.14接口输入错误数
ifOutErrors1.3.6.1.2.1.2.2.1.20接口输出错误数

通过如下代码即可调用

# 获取网卡进出流量
snmpget -v 2c -c public 192.168.72.20 ifInOctets.950 ifOutOctets.950# 获取网卡进出流量
snmpget -v 2c -c public 192.168.72.20 1.3.6.1.2.1.2.2.1.10.950 1.3.6.1.2.1.2.2.1.16.950

或者使用walk命令

# 获取系统名称
snmpwalk -v 2c -c public 192.168.72.20 sysName# 获取所有端口名称和编号的映射关系
snmpwalk -v2c -c public 192.168.72.20 1.3.6.1.2.1.31.1.1.1.1

二、流量监控


2.1 实验要求

在这里插入图片描述

  1. 搭建如下网络拓扑图,容器之间配置OSPF协议,保证可以互相访问

  2. 设置YR3为服务器端,YR1为客户端

  3. YR1访问YR3,,YR3可监控本身流量

2.2 安装工具


在服务器端YR3下载相关软件,同时设置开机自启,[注意:这里是snmpd]

apt-get install snmpd
apt-get install snmp
systemctl enable snmpd
systemctl start snmpd

2.3 配置SNMP共同体


2.3.1 共同体意义

SNMP共同体(Community)是一个简单的密码系统,用于保护SNMP的管理访问。当SNMP管理者向SNMP代理发出请求时,必须指定正确的共同体名称才能成功访问SNMP代理。如果共同体名称不正确,则SNMP代理将拒绝该请求。

SNMP代理的配置中,通常会设置多个不同的共同体名称。这些共同体名称可以具有不同的访问级别和权限。例如,可以将某些共同体名称配置为只读,而将其他共同体名称配置为读写。这样可以根据具体的管理需求来分配不同的访问权限。

2.3.2 配置共同体

在服务器端YR3中配置共同体

vi /etc/snmp/snmpd.conf

在文件末尾添加如下内容

rocommunity public

2.4 配置允许远程访问


YR3vi /etc/snmp/snmpd.conf修改配置文件,否则只能本地访问

# 大概在15行,将下面一行注释掉:
agentAddress  udp:127.0.0.1:161

重启之后查看当前状态,服务对外开启

service snmpd restart
netstat -antup | grep 161 

2.5 映射SNMP中网卡编号


SNMP协议中,端口编号通常是由设备自动生成的,端口通常使用整数编号进行标识,而不是名称。

进入YR3,获取YR3上端口的编号

# 获取所有端口名称和编号的映射关系
snmpwalk -v2c -c public 192.168.72.20 1.3.6.1.2.1.31.1.1.1.1

其中-v表示指定版本,-c表示指定共同体名称,192.168.72.20YR3ip地址

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FUhm57lt-1680491816419)(C:\Users\29973\AppData\Roaming\Typora\typora-user-images\image-20230401152045586.png)]

可以看到

# 表示eth1网卡
1.3.6.1.2.1.31.1.1.1.948# 表示eth2网卡
1.3.6.1.2.1.31.1.1.1.950

2.6 开启流量监控


YR3中设置需要监控的流量端口,打开配置文件

vi /etc/snmp/snmpd.conf

在文件末尾添加如下内容

# 指定需要获取流量信息的网络接口
interface eth2# 指定传输速度ifSpeed 100000000# 指定网络接口类型,这里是以太网接口类型。ifType ethernetCsmacd# 指定网络接口的描述信息ifDescr "Interface_Eth2"# 获取网络接口的输入字节数,oid是1.3.6.1.2.1.2.2.1.10,最后的950表示eth2接口ifInOctets Counter32 1.3.6.1.2.1.2.2.1.10.950# 获取网络接口的输出字节数,oid是1.3.6.1.2.1.2.2.1.16,最后的950表示eth2接口ifOutOctets Counter32 1.3.6.1.2.1.2.2.1.16.950

重启服务

systemctl restart snmpd

2.7 查看流量监控


YR1YR3发送数据包,在YR3中开启端口流量监控

其中192.168.72.20YR3ip地址,ifInOctets.950ifOutOctets.950分别指定了输入和输出流量的OID(即在2.6中的定义)

snmpwalk -v 2c -c public 192.168.72.20 ifInOctets.950 ifOutOctets.950

2.8 碰到的问题


2.8.1 问题一

问题描述

访问出错无法获得流量,无法识别有效的自定义标识符

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4Y2mmLJT-1680491816420)(C:\Users\29973\AppData\Roaming\Typora\typora-user-images\image-20230401162829040.png)]

解决办法

通过下载第三方的解析库来实现标识符的转换

进入服务器端YR3,下载第三方库

apt-get install snmp-mibs-downloader

在服务器端YR3修改配置文件vi /etc/snmp/snmp.conf

# 注释掉下面这一行
mibs :

重启服务

service snmpd restart

再次监控流量即可

snmpwalk -v 2c -c public 192.168.72.20 ifInOctets.950 ifOutOctets.950

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eR5Kn2iD-1680491816420)(C:\Users\29973\AppData\Roaming\Typora\typora-user-images\image-20230401164609600.png)]

2.8.2 问题二

问题描述

只能监控进或者出的流量,而不能同时监控两个

解决办法

snmpwalk只支持输出第一个参数的流量结果,将其替换为snmpget即可监控进出流量

snmpget -v 2c -c public 192.168.72.20 ifInOctets.950 ifOutOctets.950

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GF6AMSfR-1680491816421)(C:\Users\29973\AppData\Roaming\Typora\typora-user-images\image-20230401165732650.png)]

2.8.2 问题三

问题描述

每次输入的命令只能监控当前时刻流量,如何持续监控

解决办法

配合脚本文件实现

vi getFlow.sh

添加如下内容

#!/bin/bash# 定义监控流量进出的命令
InFlow="snmpget -v 2c -c public 192.168.72.20 ifInOctets.950"
OutFlow="snmpget -v 2c -c public 192.168.72.20 ifOutOctets.950"# 定义存放日志位置
logFile="/root/Flow.log"# 循环获5次流量
for((i=1;i<=5;i++))
do# 获取进入流量和出去流量,$NF表示获取最后一列(即获取流量大小)in_bytes=$($InFlow | awk '{print $NF}')out_bytes=$($OutFlow | awk '{print $NF}')# 将流量信息写入日志文件echo "$(date +%Y-%m-%d\ %H:%M:%S) - In: $in_bytes bytes, Out: $out_bytes bytes" >> $logFile# 等待3秒再次获取流量信息sleep 3
done
echo "流量监控完毕,请查看日志文件,日志文件位置如下:$logFile"

运行截图如下

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nfIbolq0-1680491816422)(C:\Users\29973\AppData\Roaming\Typora\typora-user-images\image-20230401172423224.png)]


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部