首页 >> 大全

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

2023-09-21 大全 36 作者:考证青年

一、SNMP概述 1.1 SNMP原理

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

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

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

1.2 MIB

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

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

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

1.3 SMI

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

1.3.1 基本数据类型

为了保证简单,只定义了十一种基本数据类型

1.3.2 对象模型

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

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

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

例如:封装对象

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编码规则,TLV 是ASN.1下的一种可变的格式,其中:

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

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

1.4 SNMP

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

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

PDU类型方向描述信息

管理者 -> 被管理者

读取网络设备的状态信息

管理者 -> 被管理者

远程配置网络设备参数

Trap

被管理者 -> 管理者

向管理者报告异常事件

1.5 常见OID

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

简写对应数字串涵义

1.3.6.1.2.1.1.1

设备描述符

1.3.6.1.2.1.1.3

设备运行时间

1.3.6.1.2.1.1.5

端口流量监控工具_网络端口流量监测_

设备名称

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

简写对应数字串涵义

1.3.6.1.2.1.2.2.1.2

接口描述符

1.3.6.1.2.1.2.2.1.3

接口类型

1.3.6.1.2.1.2.2.1.5

接口速率

1.3.6.1.2.1.2.2.1.6

接口物理地址

1.3.6.1.2.1.2.2.1.10

接口输入字节

1.3.6.1.2.1.2.2.1.16

接口输出字节数

1.3.6.1.2.1.2.2.1.14

接口输入错误数

1.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 实验要求

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

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

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

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

2.3.2 配置共同体

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

vi /etc/snmp/snmpd.conf

在文件末尾添加如下内容

rocommunity public

2.4 配置允许远程访问

在YR3中vi /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.20是YR3的ip地址

可以看到

# 表示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 查看流量监控

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

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

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

2.8 碰到的问题 2.8.1 问题一

问题描述

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

解决办法

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

进入服务器端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

2.8.2 问题二

问题描述

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

解决办法

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

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

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"

运行截图如下

关于我们

最火推荐

小编推荐

联系我们


版权声明:本站内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 88@qq.com 举报,一经查实,本站将立刻删除。备案号:桂ICP备2021009421号
Powered By Z-BlogPHP.
复制成功
微信号:
我知道了