1
0

snmp.pm 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. package snmp;
  2. #
  3. # Copyright (C) Roman Dmitiriev, rnd@rajven.ru
  4. #
  5. use utf8;
  6. use open ":encoding(utf8)";
  7. use strict;
  8. use English;
  9. use base 'Exporter';
  10. use vars qw(@EXPORT @ISA);
  11. use Net::SNMP;
  12. @ISA = qw(Exporter);
  13. @EXPORT = qw(
  14. snmp_set_int
  15. snmp_get_request
  16. snmp_get_oid
  17. init_snmp
  18. );
  19. BEGIN
  20. {
  21. #---------------------------------------------------------------------------------
  22. sub snmp_get_request {
  23. my $ip = shift;
  24. my $oid = shift;
  25. my $snmp = shift;
  26. my $session = init_snmp ($ip,$snmp);
  27. return if (!defined($session) or !$session);
  28. my $result = $session->get_request( -varbindlist => [$oid]);
  29. $session->close;
  30. return if (!$result->{$oid});
  31. return $result->{$oid};
  32. }
  33. #---------------------------------------------------------------------------------
  34. sub snmp_set_int {
  35. my $ip = shift;
  36. my $oid = shift;
  37. my $value = shift;
  38. my $snmp = shift;
  39. my $session = init_snmp ($ip,$snmp,1);
  40. return if (!defined($session) or !$session);
  41. my $result = $session->set_request( -varbindlist => [$oid,INTEGER,$value]);
  42. $session->close;
  43. return $result->{$oid};
  44. }
  45. #-------------------------------------------------------------------------------------
  46. sub snmp_get_oid {
  47. my ($host,$snmp,$oid) = @_;
  48. my $port = 161;
  49. my $session = init_snmp ($host,$snmp,0);
  50. return if (!defined($session) or !$session);
  51. $session->translate([-timeticks]);
  52. my $table = $session->get_table($oid);
  53. $session->close();
  54. return $table;
  55. }
  56. #-------------------------------------------------------------------------------------
  57. sub init_snmp {
  58. my ($host,$snmp) = @_;
  59. return if (!$host);
  60. ### open SNMP session
  61. my ($session, $error);
  62. if ($snmp->{version} <=2) {
  63. ($session, $error) = Net::SNMP->session(
  64. -hostname => $host,
  65. -community => $snmp->{'community'} ,
  66. -version => $snmp->{'version'},
  67. -port => 161,
  68. -timeout => $snmp->{timeout},
  69. );
  70. } else {
  71. ($session, $error) = Net::SNMP->session(
  72. -hostname => $host,
  73. -version => 'snmpv3',
  74. -username => $snmp->{'user'},
  75. -authprotocol => $snmp->{'auth'},
  76. -privprotocol => $snmp->{'priv'},
  77. -authpassword => $snmp->{'community'},
  78. -privpassword => $snmp->{'community'},
  79. -port => 161,
  80. -timeout => $snmp->{timeout},
  81. );
  82. }
  83. if (!defined($session)) {
  84. printf("ERROR: %s.\n", $error);
  85. exit 0;
  86. }
  87. return $session;
  88. }
  89. #-------------------------------------------------------------------------------------
  90. 1;
  91. }