2024年4月27日发(作者:)

Snmpv3实现方案

为实现对snmpv3的支持,主要的代码修改及实现如下:

1 需要在falsh中增加保存交换机重启次数

修改后的数据结构修改:

typedef struct flashConfigArgTag

{

/*系统mac地址*/

char szMac[6];

/*出厂mac地址*/

char szDefaultMac[6];

/*管理员密码,为了四字节对齐增加了3个字节*/

char szAdminPassword[36];

/*保存OEM的版本号*/

int oemNumber;

ulong_t bootTime;

/*保留内容,由于将来扩充由bootrom处理的内容*/

char szReserved[248];

}FLASH_CONFIG;

2 将trap或inform源地址接口改为可配置。 原来3026为使用系统ip,如果是3526将采用

出口ip。现改为启动时,3526默认接口1, 如果配置接口无ip 采用出口ip,3026仍使用

系统ip

命令行实现:

指定发送Trap的源地址

snmp-server trap-source vlan-interface vlan_id

取消发送Trap的源地址

no snmp-server trap-source

mib实现:

mib节点:snmpTrapSource

3 实现des-cbc加密解密

在srcgbnplatformepiloguecommondesfakedesfake.c中加入实现des-cbc加密解密代码

加入函数略

4 实现将口令散列为密钥

在srcgbnplatformepiloguecommoncommonlibmd5.c中增加接口函数

bits8_t * passoword_to_md5_local_user_key(MD5_CTX *mdContext, bits8_t *password,

bits32_t passwordLen)

bits8_t *passoword_to_md5_user_key(MD5_CTX *mdContext, bits8_t *password, bits32_t

passwordLen)

在srcgbnplatformepiloguecommoncommonlibsha.c中增加接口函数

bits8_t * passoword_to_sha_local_user_key(SHA_CTX *sha_info, bits8_t *password, bits32_t

passwordLen)

bits8_t *passoword_to_sha_user_key(SHA_CTX *sha_info, bits8_t *password, bits32_t

passwordLen)

5 实现引擎配置

本地引擎的配置

命令行实现:

snmp-server engineID {local engineid-string }

只允许一个本地snmp引擎,初始化其值为

0

。只允许通过命令行对其

值进行修改设置。本地引擎不可被删除,只能修改其id值。

远程引擎的配置

命令行实现:

snmp-server engineID { remote ip-address [udp-port port-number] engineid-string}

允许配置最多32个远程snmp引擎以实现trap及inform报文的接收,初始时没有远程引擎。

不输入port-number将默认输入162

删除一个已有的远程引擎id

no snmp-server engineID remote ip-address [udp-port port-number] engineid-string

不输入port-number将默认输入162

Mib实现:

mib表snmpRemoteEngineTable

1 snmpRemoteTAddress

2 snmpRemoteEngineID

显示引擎配置

命令行实现:

show snmp engineID [local | remote]

同时去掉原代码中对不可识别远程引擎的自动添加

6 实现用户配置

命令行实现:

增加一个用户或更新其密钥

snmp-server user username [remote host [udp-port port]] [ auth { md5 | sha } { authpassword

{encrypt-authpassword authpassword | authpassword } | authkey {encrypt-authkey authkey |

authkey } } [ priv des { privpassword {encrypt-privpassword privpassword | privpassword } |

privkey {encrypt-privkey privkey | privkey } } ]

系统初始化时存在3个本地引擎的用户:

initialmd5(要求md5鉴别)

initialsha(要求sha鉴别)

initialnone(不要求鉴别)

删除一个用户

no snmp-server user username [remote host [udp-port port]]

显示用户

show snmp user

限制用户数最大为64

7 实现组配置

增加一个组

snmp-server group groupname { 1 | 2c | 3 [auth | noauth | priv]}] [read readview]

[write writeview] [notify notifyview] [context context-name]

系统初始化时存在组:

安全模型为v3,安全级别为鉴别的组initial

安全模型为v3,安全级别为鉴别加密的组initial

本地设备默认上下文为NULL

删除一个组

no snmp-server group groupname {1 | 2c | 3 [auth | noauth | priv]} [context context-name]

显示已存在组

show snmp group

限制组数最大为32

8 实现视图配置

命令行实现:

增加一个视图

snmp-server view view-name oid-tree { included | excluded }

系统初始化时存在视图:

internet

sysview

删除一个视图或视图中的一个子树

no snmp-server view view-name [ oid-tree ]

限制最大视图数为64

9 实现远程trap/inform主机配置

命令行实现:

增加发送trap或inform的远程主机

snmp-server host host-addr [version {1 | 2c | 3 [auth | noauth | priv]}]

[udp-port port] [ notify-type [ notifytype-list ] ]

删除发送trap或inform的远程主机

no snmp-server host ip-address community-string { 1 | 2c | 3 }

配置团体名及对应视图

snmp-server community community-name { ro | rw } { deny | permit } [ view view-name ]

不输入视图将默认添加视图internet

10 配置通告发送方式及是否能被发送

命令行实现:

允许发送指定的通告类型

snmp-server enable traps [

notificationtype-list

]

发送方式为trap

snmp-server enable informs [

notificationtype-list

]

发送方式为inform

不允许发送指定的通告类型

no snmp-server enable traps/informs [

notificationtype-list

]

11 配置安全名

命令行实现:

将一个安全名加入到一个组中

snmp-server security-name

securityname groupname { 1 | 2c | 3 }

将一个安全名从组中删除

no snmp-server security-name securityname groupname { 1 | 2c | 3 }

12 设置交换机重启次数

在调试模式下有如下命令:

snmp-server reboot-time

可设置交换机已重启次数,每次重启时将自动加1