⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 snmp_util.pm

📁 动态域名解决方案。类似windows下的花生壳。代码用perl编写
💻 PM
📖 第 1 页 / 共 3 页
字号:
  $community = "public";  $nlhost = "";  ($community, $host) = ($1, $2) if ($host =~ /^(.*)@([^@]+)$/);  ($host, $port, $timeout, $retries, $backoff, $version) = split(':', $host, 6)    if ($host =~ /:/);  $version = '1' unless defined $version;  undef($port) if (defined($port) && length($port) <= 0);  if (defined($port) && ($port =~ /^([^!]*)!(.*)$/)) {    ($port, $lhost) = ($1, $2);    $nlhost = $lhost;    ($lhost, $lport) = ($1, $2) if ($lhost =~ /^(.*)!(.*)$/);    undef($lhost) if (defined($lhost) && (length($lhost) <= 0));    undef($lport) if (defined($lport) && (length($lport) <= 0));  }  $port = 162 if ($type == 1 && !defined($port));  $nhost = "$community\@$host";  $nhost .= ":" . $port if (defined($port));  if ((!defined($SNMP_util::Session))    || ($SNMP_util::Host ne $nhost)    || ($SNMP_util::Version ne $version)    || ($SNMP_util::LHost ne $nlhost)) {    if (defined($SNMP_util::Session)) {      $SNMP_util::Session->close();          undef $SNMP_util::Session;      undef $SNMP_util::Host;      undef $SNMP_util::Version;      undef $SNMP_util::LHost;    }    $SNMP_util::Session = ($version =~ /^2c?$/i)      ? SNMPv2c_Session->open($host, $community, $port, undef,				$lport, undef, $lhost)      : SNMP_Session->open($host, $community, $port, undef,				$lport, undef, $lhost);    ($SNMP_util::Host = $nhost, $SNMP_util::Version = $version,      $SNMP_util::LHost = $nlhost) if defined($SNMP_util::Session);  }  if (defined($SNMP_util::Session)) {    if (ref $vars->[0] eq 'HASH') {      my $opts = shift @$vars;      foreach $type (keys %$opts) {	if (exists $SNMP_util::Session->{$type}) {	  if ($type eq 'timeout') {	    $SNMP_util::Session->set_timeout($opts->{$type});	  } elsif ($type eq 'retries') {	    $SNMP_util::Session->set_retries($opts->{$type});	  } elsif ($type eq 'backoff') {	    $SNMP_util::Session->set_backoff($opts->{$type});	  } else {	    $SNMP_util::Session->{$type} = $opts->{$type};	  }	} else {	  carp "SNMPopen Unknown SNMP Option Key '$type'\n"	    unless ($SNMP_Session::suppress_warnings > 1);	}      }    }    $SNMP_util::Session->set_timeout($timeout)      if (defined($timeout) && (length($timeout) > 0));    $SNMP_util::Session->set_retries($retries)      if (defined($retries) && (length($retries) > 0));    $SNMP_util::Session->set_backoff($backoff)      if (defined($backoff) && (length($backoff) > 0));  }  return $SNMP_util::Session;}## A restricted snmpget.#sub snmpget ($@) {  my($host, @vars) = @_;  my(@enoid, $var, $response, $bindings, $binding, $value, $oid, @retvals);  my $session;  $session = &snmpopen($host, 0, \@vars);  if (!defined($session)) {    carp "SNMPGET Problem for $host\n"      unless ($SNMP_Session::suppress_warnings > 1);    return undef;  }  @enoid = &toOID(@vars);  return undef unless defined $enoid[0];  if ($session->get_request_response(@enoid)) {    $response = $session->pdu_buffer;    ($bindings) = $session->decode_get_response($response);    while ($bindings) {      ($binding, $bindings) = decode_sequence($bindings);      ($oid, $value) = decode_by_template($binding, "%O%@");      my $tempo = pretty_print($value);      push @retvals, $tempo;    }    return(@retvals);  }  $var = join(' ', @vars);  carp "SNMPGET Problem for $var on $host\n"    unless ($SNMP_Session::suppress_warnings > 1);  return undef;}## A restricted snmpgetnext.#sub snmpgetnext ($@) {  my($host, @vars) = @_;  my(@enoid, $var, $response, $bindings, $binding);  my($value, $upoid, $oid, @retvals);  my($noid);  my $session;  $session = &snmpopen($host, 0, \@vars);  if (!defined($session)) {    carp "SNMPGETNEXT Problem for $host\n"      unless ($SNMP_Session::suppress_warnings > 1);    return undef;  }  @enoid = &toOID(@vars);  return undef unless defined $enoid[0];  undef @vars;  undef @retvals;  foreach $noid (@enoid) {    $upoid = pretty_print($noid);    push(@vars, $upoid);  }  if ($session->getnext_request_response(@enoid)) {    $response = $session->pdu_buffer;    ($bindings) = $session->decode_get_response($response);    while ($bindings) {      ($binding, $bindings) = decode_sequence($bindings);      ($oid, $value) = decode_by_template($binding, "%O%@");      my $tempo = pretty_print($oid);      my $tempv = pretty_print($value);      push @retvals, "$tempo:$tempv";    }    return (@retvals);  } else {    $var = join(' ', @vars);    carp "SNMPGETNEXT Problem for $var on $host\n"      unless ($SNMP_Session::suppress_warnings > 1);    return undef;  }}## A restricted snmpwalk.#sub snmpwalk ($@) {  my($host, @vars) = @_;  return(&snmpwalk_flg($host, 0, @vars));}sub snmpwalk_flg ($$@) {  my($host, $flg, @vars) = @_;  my(@enoid, $var, $response, $bindings, $binding);  my($value, $upoid, $oid, @retvals);  my($got, @nnoid, $noid, $ok);  my $session;  my(%soid);  $session = &snmpopen($host, 0, \@vars);  if (!defined($session)) {    carp "SNMPWALK Problem for $host\n"      unless ($SNMP_Session::suppress_warnings > 1);    return undef;  }  @enoid = toOID(@vars);  return undef unless defined $enoid[0];  $got = 0;  @nnoid = @enoid;  undef @vars;  foreach $noid (@enoid) {    $upoid = pretty_print($noid);    push(@vars, $upoid);  }  while(($SNMP_util::Version ne '1' && $session->{'use_getbulk'})    ? $session->getbulk_request_response(0,					  $session->default_max_repetitions(),					  @nnoid)    : $session->getnext_request_response(@nnoid))  {    $got = 1;    $response = $session->pdu_buffer;    ($bindings) = $session->decode_get_response($response);    undef @nnoid;    while ($bindings) {      ($binding, $bindings) = decode_sequence($bindings);      ($oid, $value) = decode_by_template($binding, "%O%@");      $ok = 0;      my $tempo = pretty_print($oid);      foreach $noid (@vars) {	if ($tempo =~ /^$noid\./ || $tempo eq $noid ) {	  $ok = 1;	  $upoid = $noid;	  last;	}      }      if ($ok) {	my $tmp = encode_oid_with_errmsg ($tempo);	return undef unless defined $tmp;	$soid{$upoid} = $tmp;	my $tempv = pretty_print($value);	$tempo=~s/^$upoid\.// unless ($flg & 1);	push @retvals, "$tempo:$tempv";      }    }    @nnoid = values(%soid);    undef %soid;    last if ($#nnoid < 0);  }  if ($got) {    return (@retvals);  } else {    $var = join(' ', @vars);    carp "SNMPWALK Problem for $var on $host\n"      unless ($SNMP_Session::suppress_warnings > 1);    return undef;  }}## A restricted snmpset.#sub snmpset($@) {  my($host, @vars) = @_;  my(@enoid, $response, $bindings, $binding);  my($oid, @retvals, $type, $value);  my $session;  $session = &snmpopen($host, 0, \@vars);  if (!defined($session)) {    carp "SNMPSET Problem for $host\n"      unless ($SNMP_Session::suppress_warnings > 1);    return undef;  }  while(@vars) {    ($oid) = toOID((shift @vars));    $type  = shift @vars;    $value = shift @vars;    if ($type =~ /string/i) {      $value = encode_string($value);      push @enoid, [$oid,$value];    } elsif ($type =~ /ipaddr/i) {      $value = encode_ip_address($value);      push @enoid, [$oid,$value];    } elsif ($type =~ /int/i) {      $value = encode_int($value);      push @enoid, [$oid,$value];    } elsif ($type =~ /oid/i) {      my $tmp = encode_oid_with_errmsg($value);      return undef unless defined $tmp;      push @enoid, [$oid,$tmp];    } else {      carp "unknown SNMP type: $type\n"	unless ($SNMP_Session::suppress_warnings > 1);      return undef;    }  }  return undef unless defined $enoid[0];  if ($session->set_request_response(@enoid)) {    $response = $session->pdu_buffer;    ($bindings) = $session->decode_get_response($response);    while ($bindings) {      ($binding, $bindings) = decode_sequence($bindings);      ($oid, $value) = decode_by_template($binding, "%O%@");      my $tempo = pretty_print($value);      push @retvals, $tempo;    }    return (@retvals);  }  return undef;}## Send an SNMP trap#sub snmptrap($$$$$@) {  my($host, $ent, $agent, $gen, $spec, @vars) = @_;  my($oid, @retvals, $type, $value);  my(@enoid);  my $session;  $session = &snmpopen($host, 1, \@vars);  if (!defined($session)) {    carp "SNMPTRAP Problem for $host\n"      unless ($SNMP_Session::suppress_warnings > 1);    return undef;  }  if ($agent =~ /^\d+\.\d+\.\d+\.\d+(.*)/ ) {    $agent = pack("C*", split /\./, $agent);  } else {    $agent = inet_aton($agent);  }  push @enoid, toOID(($ent));  push @enoid, encode_ip_address($agent);  push @enoid, encode_int($gen);  push @enoid, encode_int($spec);  push @enoid, encode_timeticks((time-$agent_start_time) * 100);  while(@vars) {    ($oid) = toOID((shift @vars));    $type  = shift @vars;    $value = shift @vars;    if ($type =~ /string/i) {      $value = encode_string($value);      push @enoid, [$oid,$value];    } elsif ($type =~ /ipaddr/i) {      $value = encode_ip_address($value);      push @enoid, [$oid,$value];    } elsif ($type =~ /int/i) {      $value = encode_int($value);      push @enoid, [$oid,$value];    } elsif ($type =~ /oid/i) {      my $tmp = encode_oid_with_errmsg($value);      return undef unless defined $tmp;      push @enoid, [$oid,$tmp];    } else {      carp "unknown SNMP type: $type\n"	unless ($SNMP_Session::suppress_warnings > 1);      return undef;    }  }  return($session->trap_request_send(@enoid));}## A restricted snmpgetbulk.#sub snmpgetbulk ($$$@) {  my($host, $nr, $mr, @vars) = @_;  my(@enoid, $var, $response, $bindings, $binding);  my($value, $upoid, $oid, @retvals);  my($noid);  my $session;  $session = &snmpopen($host, 0, \@vars);  if (!defined($session)) {    carp "SNMPGETBULK Problem for $host\n"      unless ($SNMP_Session::suppress_warnings > 1);    return undef;  }  @enoid = &toOID(@vars);  return undef unless defined $enoid[0];  undef @vars;  undef @retvals;  foreach $noid (@enoid) {    $upoid = pretty_print($noid);    push(@vars, $upoid);  }  if ($session->getbulk_request_response($nr, $mr, @enoid)) {    $response = $session->pdu_buffer;    ($bindings) = $session->decode_get_response($response);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -