代码之家  ›  专栏  ›  技术社区  ›  Korbi

当我尝试使用Net::SNMP连接到设备时,为什么会出现错误“Received usmStatsUnknowUserNames.0 Report PDU with value 1”?

  •  1
  • Korbi  · 技术社区  · 10 年前

    我正在尝试编写Perl脚本来实现SNMP get。它应该像以下命令一样工作:

    snmpget -v 3 -l authNoPriv -a MD5 -u V3User -A V3Password 10.0.1.203 sysUpTime.0
    

    退货:

    SNMPv2-MIB::sysUpTime.0 = Timeticks: (492505406) 57 days, 0:04:14.06
    

    但我的Perl脚本返回以下内容:

    ERROR: Received usmStatsUnknownUserNames.0 Report-PDU with value 1 during synchronization.
    

    最后但并非最不重要的是,下面是Perl脚本:

    use strict;
    use warnings;
    
    use Net::SNMP;
    
    my $desc = 'sysUpTime.0';
    
    my ($session, $error) = Net::SNMP->session(
       -hostname     => '10.0.1.202',
       -version      => 'snmpv3',
       -username     => 'V3User',
       -authprotocol => 'md5',
       -authpassword => 'V3Password'
    );
    
    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;
    

    我调用了Perl脚本 snmpget 在同一台(Linux)机器上。是什么导致了这种情况,我该如何解决?

    2 回复  |  直到 10 年前
        1
  •  3
  •   Community CDub    7 年前

    PrgmError points out ,您在Perl脚本中使用的IP地址与在 snmpget 命令我会再检查一遍。您收到的特定错误表明您的用户名错误;如果IP不匹配只是你问题中的一个错别字,我会再次检查用户名。

    关于Perl脚本的其他几点:

    使用 die

    你应该使用 死亡 而不是 printf exit 自从 死亡 将打印调用它的行号。如果有多处脚本可能失败,这将使调试脚本更加容易:

    die "Error: $error" if not defined $session;
    

    将打印以下内容

    Error: foo bar at foo.pl line 17.
    

    此外,使用 return 内部 if 这句话毫无意义;我想你想用

    if ($err) {
        exit 1;
    }
    

    但你应该 死亡 您会得到特定的错误消息,而不是默默地失败:

    die $err if $err;
    

    将参数固定到 get_request

    调用 获取请求(_R) 方法看起来是错误的。根据 docs ,您应该这样称呼它:

    my $response = $session->get_request(-varbindlist => [ $oid ]);
    

    请注意 Net::SNMP 仅适用于数字OID,因此您必须更改 sysUpTime.0 1.3.6.1.2.1.1.3.0 .

        2
  •  1
  •   PrgmError    10 年前

    查看您的脚本,我注意到主机名值为10.0.1。 202

    但您使用的snmpget命令具有10.0.1。 203

    有可能是错误的IP吗?