#!/usr/bin/perl # # File_________: snmpwalkh_test.pl # Date_________: 12.11.2001 # Author_______: Laurent Girod / Philip Morris Products S.A. / Neuchatel / Switzerland # Description__: Example of uses of the new snmpwalkhash function in SNMP_util # With snmpwalkhash, you can customize as you like your # results, in a hash of hashes, # by oid names, oid numbers, instances, like: # $hash{$host}{$name}{$inst} = $value; # $hash{$host}{$oid}{$inst} = $value; # $hash{$name}{$inst} = $value; # $hash{$oid}{$inst} = $value; # $hash{$oid.'.'.$inst} = $value; # $hash{$inst} = $value; # ... # Needed_______: ActiveState Perl 620 from www.perl.com # Modifications: # ######################################################################################################## use BER; use SNMP_util "0.90"; $BER::pretty_print_timeticks = 0; # Uptime in absolute value my $host = shift @ARGV || &usage; my $community = shift @ARGV || 'public'; &usage if $#ARGV >= 0; $host = "$community\@$host" if !($host =~ /\@/); # # Example 1: # my $oid_name = 'system'; print "\nCollecting [$oid_name]\n"; @ret = &snmpwalk($host, $oid_name); foreach $desc (@ret) { ($oid, $desc) = split(':', $desc, 2); print "$oid = $desc\n"; } # # Example 2: snmpwalk # my @oid_names = ('ifType', 'ifMtu', 'ifSpeed', 'ifPhysAddress',); print "\nCollecting "; map { print "[$_]\t" } @oid_names; print "\n"; @ret = &snmpwalk($host, @oid_names); foreach $desc (@ret) { ($oid, $desc) = split(':', $desc, 2); print "$oid = $desc\n"; } # # Example 3: snmpwalkhash # my %ret_hash = &snmpwalkhash($host, \&my_simple_hash, @oid_names); foreach $oid (keys %ret_hash) { foreach my $inst (sort { $a <=> $b } keys %{$ret_hash{$oid}}) { printf("%15s %3s = %s\n", $oid, $inst, $ret_hash{$oid}{$inst}); } } sub my_simple_hash { my ($h_ref, $host, $name, $oid, $inst, $value) = @_; $inst =~ s/^\.+//; if ($name =~/ifPhysAddress/) { my $mac = ''; map { $mac .= sprintf("%02X",$_) } unpack "CCCCCC", $value; $value = $mac; } $h_ref->{$name}->{$inst} = $value; } sub usage { die "usage: $0 hostname [community]"; }