关于SNMPV3协议开发

由于项目需要SNMPV3支持,但手中没有现成的V3库,所以需要重新开发,现在将对v3开发说一下思路性的东西

在开发过程中,觉得包的结构不是重点,比较简单,可以参考

http://www.comsoc.org/livepubs/surveys/public/4q98issue/stallings.html SNMPv3 A Security Enhancement for SNMP

 

 

重点在加密上,snmpv3请参考

http://www.ietf.org/rfc/rfc2271.txt   ---  http://www.ietf.org/rfc/rfc2274.txt

我硬是看了rfc2天,才揣摩出来,由于是公司代码,不方便公布出来,说说snmpv3加密的思路

 

snmpv3 分为 noAuthNoPriv, authNoPriv(), authPriv

 

noAuthNoPriv 为不验证,其结构就是snmpv3的原始结构,其中authParameters 120authParameters必须为12位,怎么才能得到这12位,下面将阐述一下

 

这里只是说一下 authNoPriv 模式,这个模式理解了,其他都好理解了

 

authNoPriv 分为 hmac -md5 -96  hmac – sha-96 加密方式,

 

关于  md5  可以参考 http://www.ietf.org/rfc/rfc1321.txt ,网页下面有c语言的demo

 

hmac -md5 -96 是在 md5基础上进行hash运算的算法,可以参考

http://www.ietf.org/rfc/rfc2104.txt,网页下面有c语言的demo

 

这两个文档,就可以写出一个下面的函数。

voidhmac_md5(text, text_len, key, key_len, digest)unsigned  char *   text;                 /* pointer to data stream */ int              text_len;             /* length of data stream */ unsigned  char *   key;                  /* pointer to authentication key */ int              key_len;              /* length of authentication key */ caddr_t         digest;               /* caller digest to be filled in */  

 

其中输入,text为你准备发送的内容,这个准备发送的内容为当你authNoPriv选项的内容,但 authParameters 120,一定要注意。

 

Key 为用auth密码和engineID 加密后产生的key,下面将介绍怎么产生的

 

Digest 就为输出的authParameters 应该为多少的值,前面说了的必须为12字节,那么用md5码加密后为16字节怎么办,取前面12个就可以了

 

得到了 authParameters 这个价值后 ,把原来 authParameters 替换后,发送 ,就OK

 

 

最后说一下KEY怎么产生 ,请参考

http://www.ietf.org/rfc/rfc2274.txt ,下面有个CDemo ,MD5

void  password_to_key_md5(   u_char  * password,     /* IN */    u_int   passwordlen,  /* IN */    u_char  * engineID,     /* IN  - pointer to snmpEngineID  */    u_int   engineLength  /* IN  - length of snmpEngineID */    u_char  * key)          /* OUT - pointer to caller 16-octet buffer */  

password 为你设置的AuthorPass , engineID 就是你收到的EngineID了。

 

注意:RFC上的demo有点小失误,就是

memcpy(password_buf+engineLength, key, 16); 
    
    
原来是上面这行,通过我郁闷的测试发现
应该为 memcpy(password_buf+engineLength+16, key, 16); 一定注意哈 
     
     

  
  
   
    
  
  

  
  
   
    
  
  

 

 

大约就是这样了,关于SHA加密,和MD5思路是一样了,

 

authPriv 模式加密只有DES ,就是把PDU部分用DES加密,具体可以参考上面所提到的文档

 

希望对大家有所帮助。

 
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值