【问题标题】:SNMP V3 and PerlSNMP V3 和 Perl
【发布时间】:2014-10-12 00:48:49
【问题描述】:

我正在尝试在 linux 上使用 SNMPget 来获取有关我网络上设备的信息。我能够在 linux 终端上成功使用 snmpget,但现在想用 perl/python 编写一个脚本并让它为我工作。

SNMPget 示例

snmpgetnext -v 3 -n "" -u USER -a MD5 -A PASSWORD -l authNoPriv 192.168.1.1 sysDescr

我正在尝试在 perl 中做同样的事情,但我似乎找不到任何关于如何做的好文档。 我在互联网上找到的(但这不是 SNMP v3):

$cat snmp

#!/usr/bin/perl
use Net::SNMP;
my $desc = 'sysDescr';
( $session, $error ) = Net::SNMP->session(
    -hostname  => "192.168.1.1",
    -community => "public",
    -timeout   => "30",
    -port      => "161"
);

if ( !defined($session) ) {
    printf( "ERROR: %s.\n", $error );
    exit 1;
}
my $response = $session->get_request($desc);
my %pdesc    = %{$response};

my $err = $session->error;
if ($err) {
    return 1;
}
print %pdesc;
exit 0;

我尝试将其修改为 snmp v3,但无法修改。有人熟悉这个吗?

【问题讨论】:

    标签: python linux perl snmp net-snmp


    【解决方案1】:

    SNMPv3 比 v1 和 v2c 复杂得多,它至少需要用户名(就像 v1 和 v2c),在实际情况下,您必须添加身份验证和隐私协议和密码。

    您可以使用官方NET::SNMP 文档来学习如何使用这个模块,我在其中添加了一个 Set (not Get) 用法的示例:

    #! /usr/local/bin/perl
    
    use strict;
    use warnings;
    
    use Net::SNMP;
    
    my $OID_sysContact = '1.3.6.1.2.1.1.4.0';
    
    my ($session, $error) = Net::SNMP->session(
       -hostname     => 'myv3host.example.com',
        -version      => 'snmpv3',
       -username     => 'myv3Username',
       -authprotocol => 'sha1',
       -authkey      => '0x6695febc9288e36282235fc7151f128497b38f3f',
       -privprotocol => 'des',
       -privkey      => '0x6695febc9288e36282235fc7151f1284',
    );
    
    if (!defined $session) {
       printf "ERROR: %s.\n", $error;
       exit 1;
    }
    
    my $result = $session->set_request(
       -varbindlist => [ $OID_sysContact, OCTET_STRING, 'Help Desk x911' ],
    );
    
    if (!defined $result) {
       printf "ERROR: %s.\n", $session->error();
       $session->close();
       exit 1;
    }
    
    printf "The sysContact for host '%s' was set to '%s'.\n",
          $session->hostname(), $result->{$OID_sysContact};
    
    $session->close();
    
    exit 0;
    

    会话创建($session)部分是主要问题,之后您可以使用常规命令,如 v1/v2c。

    另一个问题,您需要询问 OID(例如 .1.3)格式而不是字符串名称,除非您导入 MIB 模块进行翻译。

    祝你好运……

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多