| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112 |
- package snmp;
- #
- # Copyright (C) Roman Dmitiriev, rnd@rajven.ru
- #
- use utf8;
- use open ":encoding(utf8)";
- use strict;
- use English;
- use base 'Exporter';
- use vars qw(@EXPORT @ISA);
- use Net::SNMP;
- @ISA = qw(Exporter);
- @EXPORT = qw(
- snmp_set_int
- snmp_get_request
- snmp_get_oid
- init_snmp
- );
- BEGIN
- {
- #---------------------------------------------------------------------------------
- sub snmp_get_request {
- my $ip = shift;
- my $oid = shift;
- my $snmp = shift;
- my $session = init_snmp ($ip,$snmp);
- return if (!defined($session) or !$session);
- my $result = $session->get_request( -varbindlist => [$oid]);
- $session->close;
- return if (!$result->{$oid});
- return $result->{$oid};
- }
- #---------------------------------------------------------------------------------
- sub snmp_set_int {
- my $ip = shift;
- my $oid = shift;
- my $value = shift;
- my $snmp = shift;
- my $session = init_snmp ($ip,$snmp,1);
- return if (!defined($session) or !$session);
- my $result = $session->set_request( -varbindlist => [$oid,INTEGER,$value]);
- $session->close;
- return $result->{$oid};
- }
- #-------------------------------------------------------------------------------------
- sub snmp_get_oid {
- my ($host,$snmp,$oid) = @_;
- my $port = 161;
- my $session = init_snmp ($host,$snmp,0);
- return if (!defined($session) or !$session);
- $session->translate([-timeticks]);
- my $table = $session->get_table($oid);
- $session->close();
- return $table;
- }
- #-------------------------------------------------------------------------------------
- sub init_snmp {
- my ($host,$snmp) = @_;
- return if (!$host);
- ### open SNMP session
- my ($session, $error);
- if ($snmp->{version} <=2) {
- ($session, $error) = Net::SNMP->session(
- -hostname => $host,
- -community => $snmp->{'community'} ,
- -version => $snmp->{'version'},
- -port => 161,
- -timeout => $snmp->{timeout},
- );
- } else {
- ($session, $error) = Net::SNMP->session(
- -hostname => $host,
- -version => 'snmpv3',
- -username => $snmp->{'user'},
- -authprotocol => $snmp->{'auth'},
- -privprotocol => $snmp->{'priv'},
- -authpassword => $snmp->{'community'},
- -privpassword => $snmp->{'community'},
- -port => 161,
- -timeout => $snmp->{timeout},
- );
- }
- if (!defined($session)) {
- printf("ERROR: %s.\n", $error);
- exit 0;
- }
- return $session;
- }
- #-------------------------------------------------------------------------------------
- 1;
- }
|