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仓的代码参考使用。

相关推荐
rockey6275 小时前
基于AScript的JavaScript脚本语言发布啦
javascript·c#·.net·js·script
LuoCore5 小时前
AForge.Video.FFMPEG.dll加载失败解决指南
c#
吴可可1236 小时前
C#元组解构实现变量交换
c#
CHANG_THE_WORLD6 小时前
TCP 三次握手彻底解析:SYN、ACK、SEQ、确认号与状态迁移
网络·网络协议·tcp/ip
2501_915106326 小时前
TraceEagle 代理抓包教程 本机和手机的 HTTPS 抓包方法
网络协议·计算机网络·网络安全·ios·adb·https·udp
小心我捶你啊7 小时前
数据采集和Web解锁不是一回事,从用途到规则区分
前端·爬虫·网络协议
DLYSB_7 小时前
基于 HTTP API 与 Modbus 协议的多源监控声光语音联动告警系统设计与实现
网络·网络协议·http·报警灯
慧都小妮子9 小时前
SciChart WPF v9.0 更新详解:矢量场图表、堆叠箱线图与 MVVM 轴同步来了
c#·.net·wpf·数据可视化·图表控件·图表
小邓的技术笔记13 小时前
解析 gin 接收到 http 请求是怎么处理的
网络协议·http·gin
鱼听禅13 小时前
C#学习笔记-Entity Framework Core基础操作学习
c#·orm·ef core