0

私は次の(動作する)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を取得するのはなぜですか:認証の失敗(パスワード、コミュニティ、またはキーが正しくありません)

4

2 に答える 2

1

これは、使用するsnmpgetとsnmpsetのバージョンによって異なります。古いバージョンのnet-snmpをC#ベースのSNMPエージェントhttp://sharpsnmplib.codeplex.comに対してテストしたところ、SHA認証モード+ DESプライバシーモードの場合、バグによりnet-snmpコマンドラインツールが正しい生成を妨げていることに気付きました。メッセージバイト(暗号化が間違っているため、エージェントが復号化できません)。

私の提案は、代わりにNet :: SNMPを使用しようとすることです。ご存知のように、同じバグの影響を受けません。

于 2012-02-15T02:56:35.313 に答える
1

問題は、Net::SNMPの認証キーとコマンドラインnet-snmpツールのパスワードを使用していることです。Net :: SNMPの使用法に基づいて、実際には「ローカライズされた」キーを使用しています。つまり、snmp.confファイルに適切なトークンは次のとおりです。

defAuthLocalizedKey 0xHEXSTRING
defPrivLocalizedKey 0xHEXSTRING

詳細については、snmp.confのマニュアルページを参照してください。

于 2012-02-16T21:02:33.057 に答える