news 2026/6/6 2:03:35

SNMP协议开发心得

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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仓的代码参考使用。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/6 1:56:52

告别格式噩梦:用 Headroom 打造高效的文档转 Markdown 工作流

告别格式噩梦:用 Headroom 打造高效的文档转 Markdown 工作流 在日常开发工作中,我们经常会遇到这样的场景:产品经理发来一份几十页的 Word 需求文档,老板转发了一个 PDF 格式的行业报告,或者设计团队提供了一套 PPT 格…

作者头像 李华