Viewing file: test.pl (2.52 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
#!/usr/bin/perl -w # Minimal useful application of the SNMP package. # Author: Simon Leinen <simon@lia.di.epfl.ch> # RCS $Header: /home/leinen/CVS/SNMP_Session/test/test.pl,v 1.18 2003-05-29 16:45:27 leinen Exp $ ###################################################################### # This application sends a get request for three fixed MIB-2 variable # instances (sysDescr.0, sysContact.0 and ipForwarding.0) to a given # host. The hostname and community string can be given as # command-line arguments. ######################################################################
require 5;
use SNMP_Session; use BER; use strict;
### Prototypes sub usage(); sub snmp_get($@);
$SNMP_Session::suppress_warnings = 1;
my $ipv4_only_p = 0; my $snmp_version = 1;
while ($#ARGV >= 0 and $ARGV[0] =~ /^-/) { if ($ARGV[0] eq '-4') { $ipv4_only_p = 1; } elsif ($ARGV[0] eq '-v') { shift @ARGV; usage () if $#ARGV < 0; if ($ARGV[0] =~ /^2c?/) { $snmp_version = 2; } elsif ($ARGV[0] eq '1') { $snmp_version = 1; } else { usage (); } } shift @ARGV; }
my $hostname = shift @ARGV || usage (); my $community = shift @ARGV || 'public';
usage () if $#ARGV >= 0;
my %ugly_oids = qw(sysDescr.0 1.3.6.1.2.1.1.1.0 sysContact.0 1.3.6.1.2.1.1.4.0 sysUptime.0 1.3.6.1.2.1.1.3.0 ipForwarding.0 1.3.6.1.2.1.4.1.0 ); my %pretty_oids;
foreach (keys %ugly_oids) { $ugly_oids{$_} = encode_oid (split (/\./, $ugly_oids{$_})); $pretty_oids{$ugly_oids{$_}} = $_; }
srand(); my $session = ($snmp_version == 1) ? SNMPv1_Session->open ($hostname, $community, 161, undef, undef, undef, undef, $ipv4_only_p) : SNMPv2c_Session->open ($hostname, $community, 161, undef, undef, undef, undef, $ipv4_only_p) or die "Couldn't open SNMP session to $hostname: $SNMP_Session::errmsg"; snmp_get ($session, qw(sysDescr.0 sysContact.0 sysUptime.0 ipForwarding.0)); $session->close (); 1;
sub snmp_get ($@) { my($session, @oids) = @_; my($response, $bindings, $binding, $value, $oid);
grep ($_ = $ugly_oids{$_}, @oids);
if ($session->get_request_response (@oids)) { $response = $session->pdu_buffer; ($bindings) = $session->decode_get_response ($response);
while ($bindings ne '') { ($binding,$bindings) = decode_sequence ($bindings); ($oid,$value) = decode_by_template ($binding, "%O%@"); print $pretty_oids{$oid}," => ", pretty_print ($value), "\n"; } } else { warn "SNMP problem: $SNMP_Session::errmsg\n"; } }
sub usage () { die "usage: $0 [-4] [-v (1|2)] hostname [community]"; }
|