PHP
downloads | documentation | faq | getting help | mailing lists | reporting bugs | php.net sites | links | conferences | my php.net

search for in the

snmpset> <snmpgetnext
Last updated: Fri, 29 Aug 2008

view this page in

snmprealwalk

(PHP 4, PHP 5)

snmprealwalkRetourne tous les objets, y compris leur ID d'objet

Description

array snmprealwalk ( string $host , string $community , string $object_id [, int $timeout [, int $retries ]] )
Avertissement

Cette fonction n'est pas documentée et seule la liste des arguments est disponible.



snmpset> <snmpgetnext
Last updated: Fri, 29 Aug 2008
 
add a note add a note User Contributed Notes
snmprealwalk
Anonymous
21-May-2008 10:19
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);
    }
scot at indievisible dot org
09-Aug-2006 12:10
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('.', $key, 2);
        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);
}
 
?>
scot at indievisible dot org
09-Aug-2006 08:16
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('.', $key, 2);
        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);
}
?>
railson at amixsi dot com dot br
30-May-2006 10:52
Attention: timeout is in microseconds (multiply by 1,000,000 for seconds)
Stephen Cope
09-Sep-2004 08:38
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", 50, 1);
       
$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>');
?>
Lars Troen
24-Feb-2003 05:30
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>";
      }

snmpset> <snmpgetnext
Last updated: Fri, 29 Aug 2008
 
 
show source | credits | stats | sitemap | contact | advertising | mirror sites