snmprealwalk

(PHP 4, PHP 5)

snmprealwalk Return all objects including their respective object ID within the specified one

Description

array snmprealwalk ( string $host , string $community , string $object_id [, int $timeout = 1000000 [, int $retries = 5 ]] )

The snmprealwalk() function is used to traverse over a number of SNMP objects starting from object_id and return not only their values but also their object ids.

Parameters

host

The hostname of the SNMP agent (server).

community

The read community.

object_id

The SNMP object id which precedes the wanted one.

timeout

The number of microseconds until the first timeout.

retries

The number of times to retry if timeouts occur.

Return Values

Returns an associative array of the SNMP object ids and their values on success or FALSE on error. In case of an error, an E_WARNING message is shown.

Examples

Example #1 Using snmprealwalk()

<?php
 print_r
(snmprealwalk("localhost""public""IF-MIB::ifName"));
?>

The above will output something like:

     
    Array
      (
      [IF-MIB::ifName.1] => STRING: lo
      [IF-MIB::ifName.2] => STRING: eth0
      [IF-MIB::ifName.3] => STRING: eth2
      [IF-MIB::ifName.4] => STRING: sit0
      [IF-MIB::ifName.5] => STRING: sixxs
    )

See Also

  • snmpwalk() - Fetch all the SNMP objects from an agent

Коментарии

Автор:
snmprealwalk indexes the values using the oid instead of an integer. This is useful when you need data that is contained in the oid as well as the value. 

Here's an example for retrieving and printing vlan info:
//
// I have collected the vlan identifiers earlier from the 3com mib and they are stored in the $vlan table.
// 
  for($n=0;$n<count($vlan);$n++){
    print $vlan[$n][id]."  ".$vlan[$n][name]."<br>\n";
    $ifStackStatusTable=@snmprealwalk($switch, $community, ".1.3.6.1.2.1.31.1.2.1.3.".$vlan[$n][id]); // ifMIB.ifMIBObjects.ifStackTable.ifStackEntry.ifStackStatus
    for(reset($ifStackStatusTable);  $port = key($ifStackStatusTable);  next($ifStackStatusTable)){
      print "$port=$ifStackStatusTable[$port]<br>";
      }
2003-02-24 07:30:30
http://php5.kiev.ua/manual/ru/function.snmprealwalk.html
Автор:
Here's a way to find the uptime and number of users on a machine. (Note that uptime is the uptime of the snmpd daemon, which should be fairly close to the uptime for the host.)

<?php
        $state 
snmprealwalk($host"public"".1.3.6.1.2.1.25.1"501);
       
$uptime ereg_replace("^.*\) ([0-9]+ .*):[0-9][0-9]\.[0-9]{2}.*$""\\1"$state['host.hrSystem.hrSystemUptime.0']);
       
$users  = (int)ereg_replace("Gauge32: """$state['host.hrSystem.hrSystemNumUsers.0']);
       
printf('<div class="machine"><dt>%s</dt><dd>%s</dd>'$host$desc);
       
printf('<dd>up %s</dd>'$uptime);
        if ( 
$users printf('<dd>%d user%s</dd>'$users, ($users 1) ? 's' '');
       
printf('</div>');
?>
2004-09-09 23:38:09
http://php5.kiev.ua/manual/ru/function.snmprealwalk.html
Attention: timeout is in microseconds (multiply by 1,000,000 for seconds)
2006-05-30 13:52:43
http://php5.kiev.ua/manual/ru/function.snmprealwalk.html
Since PHP doesn't have a nice snmptable-like function... here is a quick-and-dirty hack that works for me. Works on complete and sparse tables. The example oids are for the route (complete) and interface (often sparse) tables.

<?php
    $a 
snmptable("10.1.1.1""public"".1.3.6.1.2.1.4.21") or die("error");
   
print_r($a);
   
$a snmptable("10.1.1.1""public"".1.3.6.1.2.1.2.2") or die("error");
   
print_r($a);

function 
snmptable($host$community$oid) {
   
// TODO: get original state and restore at bottom
   
snmp_set_oid_numeric_print(TRUE);
   
snmp_set_quick_print(TRUE);
   
snmp_set_enum_print(TRUE); 

   
$retval = array();
   
$raw snmprealwalk($host$community$oid) or die("snmptable: unable to walk OID $oid");

   
$prefix_length 0

    foreach (
$raw as $key => $value) {
        if (
$prefix_length == 0) {
           
// don't just use $oid's length since it may be non-numeric
           
$prefix_elements count(explode('.',$oid));
           
$tmp '.' strtok($key'.');
            while (
$prefix_elements 1) {
               
$tmp .= '.' strtok('.');
               
$prefix_elements--;
            }
           
$tmp .= '.';
           
$prefix_length strlen($tmp);
        }
       
$key substr($key$prefix_length);
       
$index explode('.'$key2);
        isset(
$retval[$index[1]]) or $retval[$index[1]] = array();
        isset(
$firstrow) or $firstrow $index[1];
       
$retval[$index[1]][$index[0]] = $value;
    }

   
// check for holes in the table and fill them in
   
foreach ($retval[$firstrow] as $key => $tmp) {
        foreach(
$retval as $check => $tmp2) {
            if (! isset(
$retval[$check][$key])) {
               
$retval[$check][$key] = '';
            }
        }
    }

    return(
$retval);
}
?>
2006-08-09 11:16:49
http://php5.kiev.ua/manual/ru/function.snmprealwalk.html
Some improvements based on testing a lot of OIDs on a lot of devices.

<?php
function snmptable($host$community$oid) {
   
// TODO: get original state and restore at bottom
   
snmp_set_oid_numeric_print(TRUE);
   
snmp_set_quick_print(TRUE);
   
snmp_set_enum_print(TRUE); 

   
$retval = array();
   
$raw snmprealwalk($host$community$oid);
    if (
count($raw) == 0) return ($retval); // no data
   
   
$prefix_length 0
   
$largest 0;
    foreach (
$raw as $key => $value) {
        if (
$prefix_length == 0) {
           
// don't just use $oid's length since it may be non-numeric
           
$prefix_elements count(explode('.',$oid));
           
$tmp '.' strtok($key'.');
            while (
$prefix_elements 1) {
               
$tmp .= '.' strtok('.');
               
$prefix_elements--;
            }
           
$tmp .= '.';
           
$prefix_length strlen($tmp);
        }
       
$key substr($key$prefix_length);
       
$index explode('.'$key2);
        isset(
$retval[$index[1]]) or $retval[$index[1]] = array();
        if (
$largest $index[0]) $largest $index[0];
       
$retval[$index[1]][$index[0]] = $value;
    }

    if (
count($retval) == 0) return ($retval); // no data

    // fill in holes and blanks the agent may "give" you
   
foreach($retval as $k => $x) {
        for (
$i 1$i <= $largest$i++) {
        if (! isset(
$retval[$k][$i])) {
               
$retval[$k][$i] = '';
            }
        }
       
ksort($retval[$k]);
    }
    return(
$retval);
}
 
?>
2006-08-09 15:10:51
http://php5.kiev.ua/manual/ru/function.snmprealwalk.html
Автор:
To check if there were any results found you have to use the empty() function.  The count() function always returns a number 1 or larger.

     $walk_result = snmprealwalk($machine_ip, $community, $snmpcodes['interface_names']);

    if (empty($walk_result)) {
        print "No network interfaces found.<br>\n";
        exit(0);
    }
2008-05-21 13:19:37
http://php5.kiev.ua/manual/ru/function.snmprealwalk.html
If you wish to use version 2c or 3, use the following functions:

snmp v2c functions:

snmp2_get (string host, string community, string object_id [, int timeout [, int retries]])
snmp2_getnext (string host, string community, string object_id [, int timeout [, int retries]])
snmp2_walk (string host, string community, string object_id [, int timeout [, int retries]])
snmp2_real_walk (string host, string community, string object_id [, int timeout [, int retries]])
snmp2_set (string host, string community, string object_id, string type, mixed value [, int timeout [, int retries]])

snmp v3 functions:

snmp3_get (string host, string sec_name, string sec_level, string auth_protocol, string auth_passphrase, string priv_pr)
snmp3_getnext (string host, string sec_name, string sec_level, string auth_protocol, string auth_passphrase, string pri)
snmp3_walk (string host, string sec_name, string sec_level, string auth_protocol, string auth_passphrase, string priv_p)
snmp3_real_walk (string host, string sec_name, string sec_level, string auth_protocol, string auth_passphrase, string p)
snmp3_set (string host, string sec_name, string sec_level, string auth_protocol, string auth_passphrase, string priv_pr)
2009-08-20 07:39:21
http://php5.kiev.ua/manual/ru/function.snmprealwalk.html

    Поддержать сайт на родительском проекте КГБ