SNMP v3与NET :: SNMP一起工作,但snmpwalk / snmpget不行?

时间:2012-02-13 20:08:55

标签: perl snmp net-snmp

我有以下(工作)perl脚本:

use Net::SNMP;

 # create session to the host
 my ($session, $error) = Net::SNMP->session(
                -hostname => $hostname,
                -version => 'snmpv3',
                -username => 'my_user_name',
                -authkey => 'my_authkey',#actually, here stands the real authkey as configured on the switch
                -privkey => 'my_privkey',#same as on switch
                -authprotocol => 'sha',
                -privProtocol => 'des'
        );
        if (!defined($session)) {
            print $error . "\n";
                last;
        }

        # retrieve a table from the remote agent
        my $result = $session->get_table(
                -baseoid => $MAC_OID
        );

        if (!defined($result)) {
                print $session->error . "\n";
                $session->close;
                last;
        }
#print out the result of the snmp query
#....

现在我想用相同的键使用snmpwalk或snmpget。为此,我在我的主目录的.snmp中创建了一个 snmp.conf 文件,其中包含以下内容:

defSecurityName my_user_name
defContext ""
defAuthType SHA
defSecurityLevel authPriv
defAuthPassphrase my_auth_key here
defVersion 3
defPrivPassphrase my_privkey here
defPrivType DES

正如我所看到的,我在脚本和snmpget中使用相同的凭据。为什么我得到 snmpget:身份验证失败(密码不正确,社区或密钥)

2 个答案:

答案 0 :(得分:1)

这取决于您使用的snmpget和snmpset的版本。当我针对基于C#的SNMP代理http://sharpsnmplib.codeplex.com测试旧版net-snmp时,我注意到对于SHA authen模式+ DES隐私模式,一个错误阻止了net-snmp命令行工具生成正确的消息字节(加密是错误的,所以没有代理可以解密它。)

我的建议是你尝试使用Net :: SNMP,就像你发现的那样,它不受同一个bug的影响。

答案 1 :(得分:1)

您的问题是您正在使用Net :: SNMP的身份验证密钥和命令行net-snmp工具的密码。根据您的Net :: SNMP使用情况,您实际上使用的是“本地化”密钥。这意味着snmp.conf文件的正确令牌是:

defAuthLocalizedKey 0xHEXSTRING
defPrivLocalizedKey 0xHEXSTRING

有关详细信息,请参见snmp.conf手册页。