searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

Snmp协议介绍及开发方法

2023-05-11 02:03:30
262
0

1.Snmp介绍
简单网络管理协议:SNMP(Simple Network Management Protocol)

SNMP协议目前在用的有3个版本,分别是V1,V2C,V3。三个版本存在的差异主要在安全性、消息封装格式、GET效率方面。

基本通信模型:

1.1. 功能说明
SNMP协议主要用在局域网中对设备进行管理,应用最为广泛的是对路由器,交换机等网络设备的管理。 SNMP分为管理端和代理端(agent),管理端负责收集维护各个SNMP元素的信息,并对这些信息进行处理,最后反馈给网络管理员;代理端是运行在各个被管理的网络节点之上,负责统计该节点的各项信息,并且负责与SNMP管理端交互,接收并执行管理端的命令,上传各种本地的网络信息。

SNMP使用端口为UDP 162,主要用来接收TRAP消息,UDP 161端口接收和下发请求,如SET/GET,指令等。

基本通信协议:

 

SNMP V1中定义了5种类型的PDU(协议数据单元是SNMP消息中的数据区, 即Snmp通信时报文数据的载体):使用团体字(community)来作为身份认证信息。当Agent接收到与其一样的团体字的管理端消息后才会进行消息应答,可以把团体名想象成用户的概念。V1整个消息采用明文传送,通过wireshark/tcpdump等抓包工具可看到明文;
五种PDU:
1)Get:获取参数值,不能遍历table类型的参数组;
2)GetNext:可获取table类型的参数值,一组列参数;
3)Set:设置参数值;
4)Trap:发送告警;
5)Response:GET操作的响应信息;

SNMP V2C定义了7种类型的PDU,也采用团体字认证,整个消息采用明文传送。
1)Get:获取参数值,不能遍历table类型的参数组;
2)GetNext:可获取table类型的参数值,一组列参数;
3)Set:设置参数值;
4)Trap:发送告警;
5)GetBulk:通过Max repetitions参数的设定要取的数据量,一次获取全量数据。高效率地从Agent获取大量管理对象数据;
6)Inform:相当于Trap的升级版,但是Trap消息发出去之后不会收到响应消息,而inform消息在发出之后能收到响应消息;
7)Response:GET操作的响应信息

SNMP V3中沿用了V2C中7种类型的PDU,增加了report(当消息不能解密时发送该消息)。V3采用了USM和VACM技术。USM(基于用户的安全模型)提供了认证和加密功能,VACM(基于视图的访问控制模型)确定用户是否允许访问特定的MIB对象以及访问方式。
USM:Agent通过对管理端消息中携带的用户、密码(采用MD5认证或者SHA加密)、authkey(认证秘钥)以及engineid(agent的标识码)对消息进行鉴权和完整性验证,整个消息体采用DES/AES进行加密。V3数据消息采用密文传送,通过wireshark/tcpdump等抓包工具不可见其实际的内容。

1.2.发展过程
版本演进图:

Snmp v1:第一个RFC系列出现在1988年;
RFC 1065:基于TCP/IP网络的管理信息的结构和认定
RFC 1066:以基于TCP/IP网络的网络管理为基础的管理信息
RFC 1067:一个简单网络管理协议

Snmp v2:(RFC 1441–RFC 1452)
SNMP v2u:(基于用户的SNMP第二版)定义于RFC 1909–RFC 1910。这是一个SNMP第一版和SNMP第二版的折衷方案,试图提供比SNMP第一版更好的安全性,又不遭遇SNMP第二版的高复杂度。这产生一个被商业化的变种,称为SNMP v2*,而且它的机制最后被SNMP第三版的两个安全性框架之一采用。
SNMP v2c:(基于社区的SNMP第二版)定义于RFC 1901–RFC 1908;

Snmp v3:2004年RFC3411-RFC3418中定义。

1.3.Mib(管理信息库)相关知识
任何一个被管理的资源都表示成一个对象,称为被管理的对象。MIB是被管理对象的集合。它定义了被管理对象的一系列属性:对象的名称、对象的访问权限和对象的数据类型等。每个SNMP设备(Agent)都有自己的MIB。MIB也可以看作是NMS(网管系统)和Agent之间的沟通桥梁。

MIB采用分层树形结构,对象命名树的顶级对象有三个,即 ISO、ITU-T 和这两个组织的联合体。在 ISO 的下面有 4 个结点,其中的饿一个(标号 3)是被标识的组织。在其下面有一个美国国防部(Department of Defense)的子树(标号是 6),再下面就是 Internet(标号是 1)。在只讨论 Internet 中的对象时,可只画出 Internet 以下的子树(图中带阴影的虚线方框),并在 Internet 结点旁边标注上{1.3.6.1}即可。

MIB的树形结构:

 

OID(Object Identifier),中文名称:对象标识符,被管理设备的每个管理资源和对象都有自己的OID(Object Identifier),管理对象通过树状结构进行组织,OID由树上的一系列整数组成,整数之间用点( . )分隔开,树的叶子节点才是真正能够被管理的对象。

企业id:1.3.6.1.4.1.xxx
已申请的id链接:https://www.iana.org/assignments/enterprise-numbers/enterprise-numbers

如:

Oid申请地址:
https://pen.iana.org/pen/PenApplication.page

Mib文件简单定义:

2. 开发方法及经验
2.1. 开发方式介绍
开发企业oid的三种方法:
1)静态加载:将生成的.c和.h文件加入到相应的位置,重新编译snmp库,优点是不需要修改配置文件,缺点是每次添加都得重新编译;
2)动态加载:编译snmpd时需要开启--enable-mini-agen和--with-mib-modules=dlmod。开发时将生成的.c和.h文件再编译成.so库,修改snmpd.conf配置文件,使用dlmod命令加载.so库。
3)子代理扩展:将生成的.c和.h文件编译成可执行程序,运行该程序(agent)和snmpd即可,优点是操作简单,缺点是需要运行两个程序才行。

我们的开发模式一般采用第三种。不用修改原生的net-snmp。只要在agent中实现需要支持的企业oid即可。如有更新agent需求时直接更新agent即可。

开发步骤:
1)编写mib文件,定义数据结构;
2)使用mib2c生成 mib库对应的.c和.h文件;
3)修改生成的.c文件,实现自己的逻辑需求;
4)编写Makefile生成agent程序;

mib2c工具介绍:
mib2c是一个把mib库转换成C代码的工具,支持多种模板的转换,如标量、表和告警;

Scalars:使用mib2c.scalar.conf模板生成标量数据代码;
Table:使用mib2c.iterate.conf模板生成表相关代码;
Trap:使用mib2c.notify.conf模板来生成告警代码;

示例:
mib2c -c mib2c.iterate.conf EVERSEC-TEST::portStatisticsTable

Net-snmp源码下载地址:
http://www.net-snmp.org/download.html

2.2.agent开发模式介绍
企业Agent组网形式:


端口705(可配置)是代理端和企业agent的通信端口,通过此端口企业agent向代理端注册企业支持的oid信息,上报告警、并支持代理端查询企业oid信息。

最简单的配置文件:


必须指定使用master agentx模式(master agentx)
master和agentx的通信方式为tcp:localhost:705(只监听本机的tcp协议的705端口)

2.3. snmp基础工具
snmpd:代理端工具;
snmpwalk:读取oid节点信息,可读取表信息;
snmpget:只能读取单个oid节点,不能读取整个表信息;
snmpset:设置oid值;
snmptranslate:支持把oid描述和oid值进行转换显示的工具;
snmptrapd:告警调试工具,可模拟发出告警。

 

 

 

 

 

 

 

 

 

0条评论
作者已关闭评论
z****m
3文章数
0粉丝数
z****m
3 文章 | 0 粉丝
z****m
3文章数
0粉丝数
z****m
3 文章 | 0 粉丝
原创

Snmp协议介绍及开发方法

2023-05-11 02:03:30
262
0

1.Snmp介绍
简单网络管理协议:SNMP(Simple Network Management Protocol)

SNMP协议目前在用的有3个版本,分别是V1,V2C,V3。三个版本存在的差异主要在安全性、消息封装格式、GET效率方面。

基本通信模型:

1.1. 功能说明
SNMP协议主要用在局域网中对设备进行管理,应用最为广泛的是对路由器,交换机等网络设备的管理。 SNMP分为管理端和代理端(agent),管理端负责收集维护各个SNMP元素的信息,并对这些信息进行处理,最后反馈给网络管理员;代理端是运行在各个被管理的网络节点之上,负责统计该节点的各项信息,并且负责与SNMP管理端交互,接收并执行管理端的命令,上传各种本地的网络信息。

SNMP使用端口为UDP 162,主要用来接收TRAP消息,UDP 161端口接收和下发请求,如SET/GET,指令等。

基本通信协议:

 

SNMP V1中定义了5种类型的PDU(协议数据单元是SNMP消息中的数据区, 即Snmp通信时报文数据的载体):使用团体字(community)来作为身份认证信息。当Agent接收到与其一样的团体字的管理端消息后才会进行消息应答,可以把团体名想象成用户的概念。V1整个消息采用明文传送,通过wireshark/tcpdump等抓包工具可看到明文;
五种PDU:
1)Get:获取参数值,不能遍历table类型的参数组;
2)GetNext:可获取table类型的参数值,一组列参数;
3)Set:设置参数值;
4)Trap:发送告警;
5)Response:GET操作的响应信息;

SNMP V2C定义了7种类型的PDU,也采用团体字认证,整个消息采用明文传送。
1)Get:获取参数值,不能遍历table类型的参数组;
2)GetNext:可获取table类型的参数值,一组列参数;
3)Set:设置参数值;
4)Trap:发送告警;
5)GetBulk:通过Max repetitions参数的设定要取的数据量,一次获取全量数据。高效率地从Agent获取大量管理对象数据;
6)Inform:相当于Trap的升级版,但是Trap消息发出去之后不会收到响应消息,而inform消息在发出之后能收到响应消息;
7)Response:GET操作的响应信息

SNMP V3中沿用了V2C中7种类型的PDU,增加了report(当消息不能解密时发送该消息)。V3采用了USM和VACM技术。USM(基于用户的安全模型)提供了认证和加密功能,VACM(基于视图的访问控制模型)确定用户是否允许访问特定的MIB对象以及访问方式。
USM:Agent通过对管理端消息中携带的用户、密码(采用MD5认证或者SHA加密)、authkey(认证秘钥)以及engineid(agent的标识码)对消息进行鉴权和完整性验证,整个消息体采用DES/AES进行加密。V3数据消息采用密文传送,通过wireshark/tcpdump等抓包工具不可见其实际的内容。

1.2.发展过程
版本演进图:

Snmp v1:第一个RFC系列出现在1988年;
RFC 1065:基于TCP/IP网络的管理信息的结构和认定
RFC 1066:以基于TCP/IP网络的网络管理为基础的管理信息
RFC 1067:一个简单网络管理协议

Snmp v2:(RFC 1441–RFC 1452)
SNMP v2u:(基于用户的SNMP第二版)定义于RFC 1909–RFC 1910。这是一个SNMP第一版和SNMP第二版的折衷方案,试图提供比SNMP第一版更好的安全性,又不遭遇SNMP第二版的高复杂度。这产生一个被商业化的变种,称为SNMP v2*,而且它的机制最后被SNMP第三版的两个安全性框架之一采用。
SNMP v2c:(基于社区的SNMP第二版)定义于RFC 1901–RFC 1908;

Snmp v3:2004年RFC3411-RFC3418中定义。

1.3.Mib(管理信息库)相关知识
任何一个被管理的资源都表示成一个对象,称为被管理的对象。MIB是被管理对象的集合。它定义了被管理对象的一系列属性:对象的名称、对象的访问权限和对象的数据类型等。每个SNMP设备(Agent)都有自己的MIB。MIB也可以看作是NMS(网管系统)和Agent之间的沟通桥梁。

MIB采用分层树形结构,对象命名树的顶级对象有三个,即 ISO、ITU-T 和这两个组织的联合体。在 ISO 的下面有 4 个结点,其中的饿一个(标号 3)是被标识的组织。在其下面有一个美国国防部(Department of Defense)的子树(标号是 6),再下面就是 Internet(标号是 1)。在只讨论 Internet 中的对象时,可只画出 Internet 以下的子树(图中带阴影的虚线方框),并在 Internet 结点旁边标注上{1.3.6.1}即可。

MIB的树形结构:

 

OID(Object Identifier),中文名称:对象标识符,被管理设备的每个管理资源和对象都有自己的OID(Object Identifier),管理对象通过树状结构进行组织,OID由树上的一系列整数组成,整数之间用点( . )分隔开,树的叶子节点才是真正能够被管理的对象。

企业id:1.3.6.1.4.1.xxx
已申请的id链接:https://www.iana.org/assignments/enterprise-numbers/enterprise-numbers

如:

Oid申请地址:
https://pen.iana.org/pen/PenApplication.page

Mib文件简单定义:

2. 开发方法及经验
2.1. 开发方式介绍
开发企业oid的三种方法:
1)静态加载:将生成的.c和.h文件加入到相应的位置,重新编译snmp库,优点是不需要修改配置文件,缺点是每次添加都得重新编译;
2)动态加载:编译snmpd时需要开启--enable-mini-agen和--with-mib-modules=dlmod。开发时将生成的.c和.h文件再编译成.so库,修改snmpd.conf配置文件,使用dlmod命令加载.so库。
3)子代理扩展:将生成的.c和.h文件编译成可执行程序,运行该程序(agent)和snmpd即可,优点是操作简单,缺点是需要运行两个程序才行。

我们的开发模式一般采用第三种。不用修改原生的net-snmp。只要在agent中实现需要支持的企业oid即可。如有更新agent需求时直接更新agent即可。

开发步骤:
1)编写mib文件,定义数据结构;
2)使用mib2c生成 mib库对应的.c和.h文件;
3)修改生成的.c文件,实现自己的逻辑需求;
4)编写Makefile生成agent程序;

mib2c工具介绍:
mib2c是一个把mib库转换成C代码的工具,支持多种模板的转换,如标量、表和告警;

Scalars:使用mib2c.scalar.conf模板生成标量数据代码;
Table:使用mib2c.iterate.conf模板生成表相关代码;
Trap:使用mib2c.notify.conf模板来生成告警代码;

示例:
mib2c -c mib2c.iterate.conf EVERSEC-TEST::portStatisticsTable

Net-snmp源码下载地址:
http://www.net-snmp.org/download.html

2.2.agent开发模式介绍
企业Agent组网形式:


端口705(可配置)是代理端和企业agent的通信端口,通过此端口企业agent向代理端注册企业支持的oid信息,上报告警、并支持代理端查询企业oid信息。

最简单的配置文件:


必须指定使用master agentx模式(master agentx)
master和agentx的通信方式为tcp:localhost:705(只监听本机的tcp协议的705端口)

2.3. snmp基础工具
snmpd:代理端工具;
snmpwalk:读取oid节点信息,可读取表信息;
snmpget:只能读取单个oid节点,不能读取整个表信息;
snmpset:设置oid值;
snmptranslate:支持把oid描述和oid值进行转换显示的工具;
snmptrapd:告警调试工具,可模拟发出告警。

 

 

 

 

 

 

 

 

 

文章来自个人专栏
文章 | 订阅
0条评论
作者已关闭评论
作者已关闭评论
0
0