소스 검색

bugfix: Net::SNMP sometimes incorrectly converted the mac. Automatic conversion for arp records is disabled. Manual processing is used

rajven 5 년 전
부모
커밋
c78f71f539
1개의 변경된 파일23개의 추가작업 그리고 23개의 파일을 삭제
  1. 23 23
      scripts/Rstat/snmp.pm

+ 23 - 23
scripts/Rstat/snmp.pm

@@ -50,15 +50,15 @@ $timeout
 BEGIN
 BEGIN
 {
 {
 
 
-our $ifAlias      ='1.3.6.1.2.1.31.1.1.1.18';
-our $ifName       ='1.3.6.1.2.1.31.1.1.1.1';
-our $ifDescr      ='1.3.6.1.2.1.2.2.1.2';
-our $ifIndex      ='1.3.6.1.2.1.2.2.1.1';
-our $bgp_prefixes ='1.3.6.1.4.1.9.9.187.1.2.4.1.1';
-our $bgp_aslist   ='1.3.6.1.2.1.15.3.1.9';
-our $arp_oid      ='1.3.6.1.2.1.3.1.1.2';
-our $ipNetToMediaPhysAddress = '1.3.6.1.2.1.4.22.1.2';
-our $fdb_table_oid ='1.3.6.1.2.1.17.4.3.1.2';
+our $ifAlias      ='.1.3.6.1.2.1.31.1.1.1.18';
+our $ifName       ='.1.3.6.1.2.1.31.1.1.1.1';
+our $ifDescr      ='.1.3.6.1.2.1.2.2.1.2';
+our $ifIndex      ='.1.3.6.1.2.1.2.2.1.1';
+our $bgp_prefixes ='.1.3.6.1.4.1.9.9.187.1.2.4.1.1';
+our $bgp_aslist   ='.1.3.6.1.2.1.15.3.1.9';
+our $arp_oid      ='.1.3.6.1.2.1.3.1.1.2';
+our $ipNetToMediaPhysAddress = '.1.3.6.1.2.1.4.22.1.2';
+our $fdb_table_oid ='.1.3.6.1.2.1.17.4.3.1.2';
 our $fdb_table_oid2='.1.3.6.1.2.1.17.7.1.2.2.1.2';
 our $fdb_table_oid2='.1.3.6.1.2.1.17.7.1.2.2.1.2';
 our $port_vlan_oid ='.1.3.6.1.2.1.17.7.1.4.5.1.1';
 our $port_vlan_oid ='.1.3.6.1.2.1.17.7.1.4.5.1.1';
 our $cisco_vlan_oid='.1.3.6.1.4.1.9.9.46.1.3.1.1.2';
 our $cisco_vlan_oid='.1.3.6.1.4.1.9.9.46.1.3.1.1.2';
@@ -67,42 +67,42 @@ our $timeout = 5;
 
 
 #---------------------------------------------------------------------------------
 #---------------------------------------------------------------------------------
 
 
-sub snmp_set_int {
+sub snmp_get_request {
 my $ip = shift;
 my $ip = shift;
 my $oid = shift;
 my $oid = shift;
-my $value = shift;
 my $community = shift || $snmp_default_community;
 my $community = shift || $snmp_default_community;
 my $port = shift || '161';
 my $port = shift || '161';
 my $snmp_version = shift || '2';
 my $snmp_version = shift || '2';
-
 my ($session, $error) = Net::SNMP->session(
 my ($session, $error) = Net::SNMP->session(
    -hostname  => $ip,
    -hostname  => $ip,
    -community => $community,
    -community => $community,
    -port      => $port,
    -port      => $port,
    -version   => $snmp_version
    -version   => $snmp_version
 );
 );
-my $result = $session->set_request( -varbindlist => [$oid,INTEGER,$value]);
+my $result = $session->get_request( -varbindlist => [$oid]);
 $session->close;
 $session->close;
+return if (!$result->{$oid});
 return $result->{$oid};
 return $result->{$oid};
 }
 }
 
 
 #---------------------------------------------------------------------------------
 #---------------------------------------------------------------------------------
 
 
-sub snmp_get_request {
+sub snmp_set_int {
 my $ip = shift;
 my $ip = shift;
 my $oid = shift;
 my $oid = shift;
+my $value = shift;
 my $community = shift || $snmp_default_community;
 my $community = shift || $snmp_default_community;
 my $port = shift || '161';
 my $port = shift || '161';
 my $snmp_version = shift || '2';
 my $snmp_version = shift || '2';
+
 my ($session, $error) = Net::SNMP->session(
 my ($session, $error) = Net::SNMP->session(
    -hostname  => $ip,
    -hostname  => $ip,
    -community => $community,
    -community => $community,
    -port      => $port,
    -port      => $port,
    -version   => $snmp_version
    -version   => $snmp_version
 );
 );
-my $result = $session->get_request( -varbindlist => [$oid]);
+my $result = $session->set_request( -varbindlist => [$oid,INTEGER,$value]);
 $session->close;
 $session->close;
-return if (!$result->{$oid});
 return $result->{$oid};
 return $result->{$oid};
 }
 }
 
 
@@ -118,7 +118,7 @@ sub get_arp_table {
     ### open SNMP session
     ### open SNMP session
     my ($snmp_session, $error) = Net::SNMP->session( -hostname  => $host, -community => $community , -version=>$version);
     my ($snmp_session, $error) = Net::SNMP->session( -hostname  => $host, -community => $community , -version=>$version);
     return if (!defined($snmp_session));
     return if (!defined($snmp_session));
-    $snmp_session->translate([-timeticks]);
+    $snmp_session->translate([-all]);
 
 
     my $arp;
     my $arp;
     my $arp_table1 = $snmp_session->get_table($arp_oid);
     my $arp_table1 = $snmp_session->get_table($arp_oid);
@@ -126,10 +126,10 @@ sub get_arp_table {
 
 
     if ($arp_table1) {
     if ($arp_table1) {
         foreach my $row (keys(%$arp_table1)) {
         foreach my $row (keys(%$arp_table1)) {
-        my $mac_h = lc $arp_table1->{$row};
-        $mac_h=~s/^0x//;
+        my ($mac_h) = unpack("H*",$arp_table1->{$row});
+        next if (!$mac_h);
         my $mac;
         my $mac;
-        if (length($mac_h)==12) { $mac=$mac_h; }
+        if (length($mac_h)==12) { $mac=lc $mac_h; }
         next if (!$mac);
         next if (!$mac);
         $row=trim($row);
         $row=trim($row);
         my $ip;
         my $ip;
@@ -141,10 +141,10 @@ sub get_arp_table {
 
 
     if ($arp_table2) {
     if ($arp_table2) {
         foreach my $row (keys(%$arp_table2)) {
         foreach my $row (keys(%$arp_table2)) {
-        my $mac_h = lc $arp_table2->{$row};
-        $mac_h=~s/^0x//;
+        my ($mac_h) = unpack("H*",$arp_table2->{$row});
+        next if (!$mac_h);
         my $mac;
         my $mac;
-        if (length($mac_h)==12) { $mac=$mac_h; }
+        if (length($mac_h)==12) { $mac=lc $mac_h; }
         next if (!$mac);
         next if (!$mac);
         $row=trim($row);
         $row=trim($row);
         my $ip;
         my $ip;