【问题标题】:Net::SNMP : get_request : automatic Human readable format?Net::SNMP : get_request : 自动人类可读格式?
【发布时间】:2016-12-05 14:49:41
【问题描述】:

我对 Net::SNMP 有疑问。

当我在做一个 unix snmpwalk 时:

snmpwalk -v 2c -c commu_key IP.XXX.XX.XX 1.3.6.1.4.1.9.9.42.1.2.2.1.2.XXX

我明白了:

SNMPv2-SMI::enterprises.9.9.42.1.2.2.1.2.3279 = Hex-STRING: 07 9F F4 XX

Hex-STRING 是一个 IP,每个空格是一个点。

但是当我在我的脚本中使用 Net::SNMP 时:

my ($session, $error) = Net::SNMP->session(
    -hostname => $ip,
    -community => 'commu_key',
    );
    if (!defined $session) {
     return 0;
    }
    my $result = $session->get_request(-varbindlist => [ $oid ],);
    if (!defined $session) {
     return 0;
    }
    my $ex = $result->{$oid};

但 $ex 值是:

$ex = 0x079ff4aXX

但我希望它像 snmpwalk :/

有人可以帮我吗?

【问题讨论】:

  • 所以你想输出07 9F F4 XX而不是0x079ff4aXX
  • @ThisSuitIsBlackNot yes exaclty
  • a 发生了什么?您的值中有九个十六进制字符。它到底是什么样子的?
  • 如果 a 是一个错字并且不应该存在,这将满足您的需求:$ex =~ s/^0x//; $ex = join ' ', $ex =~ m/../g;
  • @stevieb:有趣。你怎么会知道这事?你和 OP 一起工作吗?

标签: perl hex snmp


【解决方案1】:

这真的不难,你至少应该努力

为了解决这个问题,这里有一个子例程,可以满足您的要求

use strict;
use warnings;
use feature 'say';

say spaced_hex(0x079ff499);

sub spaced_hex {
    join(' ', unpack '(A2)*', sprintf('%08X', shift));
}

输出

07 9F F4 99

【讨论】:

    【解决方案2】:

    编辑:

    我这样做了:

    sub hex_ip_converter {
    
    my ($hex) = @_;
    my $ip = undef;
    
    my @array = ( $hex =~ m/../g );
    
    shift (@array);
    
    foreach my $tmp (@array) {
    $ip = $ip . '.' . hex $tmp;
    }
    $ip =~ s/^.//; 
    return $ip;
    }
    

    它正在工作。回答你所有的问题:)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-09
      • 1970-01-01
      相关资源
      最近更新 更多