SNMP协议开发心得

SNMP

基本概念

agent:设备

manager:网管系统

数据交互方式:

manager 轮询 agent (传统轮询模式)

agent 推送 manager(trap告警模式)

版本

目前有v1、v2c和v3这3个版本,使用Lextm.SharpSnmpLib库的MessageFactory.ParseMessages能自动识别不同的版本,得到统一的ISnmpMessage结构。

常用请求类型

GET请求:一次可以请求多个oid,但受到网络包大小的限制,没法请求太多oid。

GET BUIK请求:可以多次查询全部的oid,等价于分页查询或流式查询,对内存也比较友好

GET NEXT请求:请求下一个oid,GET BULK的基础版

SET请求:修改一个或多个oid的值

上述请求对应linux上snmp工具套件的snmpget、snmpbulkget、snmpgetnext、snmpset这几个命令行,样例如下:

复制代码
snmpget -v 1 -c public localhost:10161 1.3.6.1.4.1.99999.3.1.1
snmpgetnext -v 1 -c public localhost:10161 1.3.6.1.4.1.99999.3.1.1
snmpbulkget -v 2c -c public localhost:10161 1.3.6.1.4.1.99999.3.1.1 
snmpset -v 2c -c public -t 5 localhost:10161 1.3.6.1.4.1.99999.3.4.6 i 30

安全

V1和V2仅支持community string来作为明文密码。

v3支持基于用户安全协议的认证。

v3的安全级别为:noAuthNoPriv、authNoPriv、authPriv。noAuthNoPriv是只靠用户名识别,基本上等同于v1和v2里的community string了,属于裸奔;authNoPriv是身份验证+防篡改,但报文中的oid和值还是明文,可以抓包偷看;authPriv则是在authNoPriv的基础上,对oid和值也做了加密,别人无法抓包偷看。可见,三个安全级别是逐层递增的。

顺带说一下,v3版本下的manager和agent交互也跟v1/v2不一样,因为它有专门的用户安全协议,所以在发送正式的GET/GETNEXT请求前,manager和agent会有一个发现握手(discovery handshake)阶段,该阶段下,manager会先用noAuthNoPriv安全级别获得agent的EngineID和时钟信息,然后manager才用更高的安全级别发送加密请求给agent。

C#的Lextm.SharpSnmpLib库

该库提供了SNMP报文的解析,但没有提供UDP server机制(开发SNMP Agent需要),可自己开发一个简单的udp server做到及时响应,过程不难,udp因为是无连接的,所以不用像tcp server那样listen,同时因为是面向报文的,也无需像tcp那样考虑分包、粘包等繁琐细节,编程时,主线程recvFrom之后起单独的线程处理报文并sendTo结果即可。

顺带说一下,网上资料说Lextm.SharpSnmpLib库有一个SnmpEngine类实现了UDP server机制,并处理了v3版本的发现握手。仔细研究下来发现,早期版本确实有这么一个类,但开发团队不愿持续维护SnmpEngine,就把它移到sample仓了,可以到github上拿这个sample仓的代码参考使用。

相关推荐
全麦面包 time展天1 天前
瀚海拾贝(一)HTTP协议/IIS 原理及ASP.NET运行机制浅析【图解】
网络协议·http·asp.net
微硬创新1 天前
耐达讯自动化16路0-20mA转PROFINET协议转换模块技术说明
人工智能·网络协议·自动化·信息与通信
猿长大人1 天前
C# | JSON 序列化中的多态接口处理:基于 Attribute 实现精准 $type 控制
c#·json
2501_915918411 天前
iOS 怎么抓包?抓包鹰系统级 网卡 应用层三种方式对比,不越狱抓 iPhone 流量
网络协议·计算机网络·网络安全·ios·adb·https·udp
一位狮子座的程序员1 天前
如何用RAG解决AI智能体的知识盲区?
开发语言·c#
March.s1 天前
IP 存储核心 iSCSI:原理拆解 + 无报错实战指南
网络·网络协议·tcp/ip
Nemo_XP1 天前
C# gridlookupedit选中内容重复还原操作
服务器·前端·c#
猿长大人1 天前
C# | 函数式编程入门
开发语言·c#·.net
2501_915921431 天前
抓包鹰抓取系统 App 的流量,从底层读明文
网络协议·计算机网络·网络安全·adb·https·udp
unityのkiven1 天前
C# 中的奇异递归模板模式:MonoSingleton<T> 的实现
java·开发语言·c#