Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
perl snmp get_bulk_请求函数返回所有索引的数据,同时在oid中添加索引,snmpwalk on terminal提供正确的索引数据并非全部_Perl_Snmp_Modem - Fatal编程技术网

perl snmp get_bulk_请求函数返回所有索引的数据,同时在oid中添加索引,snmpwalk on terminal提供正确的索引数据并非全部

perl snmp get_bulk_请求函数返回所有索引的数据,同时在oid中添加索引,snmpwalk on terminal提供正确的索引数据并非全部,perl,snmp,modem,Perl,Snmp,Modem,注意:回调函数不在此处,但假设在需要单个索引数据时get\u bulk\u请求出现正确问题,则忽略给定索引并返回索引数据,也将考虑任何替代解决方案 $UsRx = '1.3.6.1.4.1.4491.2.1.20.1.4.1.3.737288'; my %table; # Hash to store the results my $res = $session->get_bulk_request( -varbindlist => [

注意:回调函数不在此处,但假设在需要单个索引数据时get\u bulk\u请求出现正确问题,则忽略给定索引并返回索引数据,也将考虑任何替代解决方案

    $UsRx = '1.3.6.1.4.1.4491.2.1.20.1.4.1.3.737288';
    my %table; # Hash to store the results



    my $res = $session->get_bulk_request(
        -varbindlist    => [ $UsRx ],
        -callback       => [ \&get_callback, \%table ],
        -maxrepetitions => 80,
    );

    snmp_dispatcher();

    if (!defined $res) {
        printf "ERROR: %s\n", $session->error();
        $session->close();
        exit 1;
    } 

    for my $oid (oid_lex_sort(keys %table)) {
        printf "%s,%s,\n",
        $index,
        $table{$oid};                
    }

我不确定我是否正确解释了您的问题,但听起来您好像在问为什么snmpwalk(CLI工具)只返回与您指定的前缀相同的OID,而使用get bulk from perl代码返回超出您请求的子树的OID


这是预期的行为。“snmpwalk”不是SNMP请求类型;获取批量并获取下一个。相反,“snmpwalk”是一个专用工具,它使用get-next或get-bulk并处理自身,检测get-bulk或get-next已在指定的子树之外检索到OID并终止漫游。除非您正在使用的API提供类似的函数,否则您必须在代码中实现此逻辑。代理正在执行请求的操作:返回最多80个(每个代码)varbinds按字典顺序大于请求OID。SNMP没有只检索子树的内置请求类型。

为了有机会在这里提供帮助,我们需要知道
$session
是什么类型的对象。my($session,$error)=Net::SNMP->session(-version=>'snmpv2c',-nonblocking=>1,-hostname=>$in_hostname,-community=>$in_community,-port=>161,-timeout=>3,-retries=>1);@DaveCross如果您熟悉perl snmp请求,请不要将代码转储到注释中。有关堆栈溢出的注释不支持代码格式。相反,请添加代码。
o/p :
1.3.6.1.4.1.4491.2.1.20.1.4.1.3.737288.1337,-70
1.3.6.1.4.1.4491.2.1.20.1.4.1.3.737288.1338,-75
1.3.6.1.4.1.4491.2.1.20.1.4.1.3.737288.1339,-55
1.3.6.1.4.1.4491.2.1.20.1.4.1.3.737288.1340,-60
1.3.6.1.4.1.4491.2.1.20.1.4.1.3.737289.1337,-75
1.3.6.1.4.1.4491.2.1.20.1.4.1.3.737289.1338,-75
1.3.6.1.4.1.4491.2.1.20.1.4.1.3.737289.1339,-60
1.3.6.1.4.1.4491.2.1.20.1.4.1.3.737289.1340,-65
1.3.6.1.4.1.4491.2.1.20.1.4.1.3.737290.1337,-80
1.3.6.1.4.1.4491.2.1.20.1.4.1.3.737290.1338,-70
1.3.6.1.4.1.4491.2.1.20.1.4.1.3.737290.1339,-65
1.3.6.1.4.1.4491.2.1.20.1.4.1.3.737290.1340,-65
1.3.6.1.4.1.4491.2.1.20.1.4.1.3.737291.1337,-65
1.3.6.1.4.1.4491.2.1.20.1.4.1.3.737291.1338,-55
1.3.6.1.4.1.4491.2.1.20.1.4.1.3.737291.1339,-50
1.3.6.1.4.1.4491.2.1.20.1.4.1.3.737291.1340,-45
1.3.6.1.4.1.4491.2.1.20.1.4.1.3.737293.1337,-15


Expected o/p :
1.3.6.1.4.1.4491.2.1.20.1.4.1.3.737288.1337,-70
1.3.6.1.4.1.4491.2.1.20.1.4.1.3.737288.1338,-75
1.3.6.1.4.1.4491.2.1.20.1.4.1.3.737288.1339,-55
1.3.6.1.4.1.4491.2.1.20.1.4.1.3.737288.1340,-60

While this working fine with snmpwalk on terminal
system@new:~$ snmpwalk -v2c -c #543%we 23.9.4.67 1.3.6.1.4.1.4491.2.1.20.1.4.1.3.737288

iso.3.6.1.4.1.4491.2.1.20.1.4.1.3.737288.1337 = INTEGER: -70
iso.3.6.1.4.1.4491.2.1.20.1.4.1.3.737288.1338 = INTEGER: -75
iso.3.6.1.4.1.4491.2.1.20.1.4.1.3.737288.1339 = INTEGER: -55
iso.3.6.1.4.1.4491.2.1.20.1.4.1.3.737288.1340 = INTEGER: -60