我有以下(工作)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:身份验证失败(密码不正确,社区或密钥)?
答案 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手册页。