snmpwalk

(PHP 4, PHP 5, PHP 7, PHP 8)

snmpwalkRuft alle SNMP-Objekte eines Agenten ab

Beschreibung

snmpwalk(
    string $hostname,
    string $community,
    array|string $object_id,
    int $timeout = -1,
    int $retries = -1
): array|false

Die Funktion snmpwalk() wird verwendet, um alle Werte von dem SNMP-Agenten zu lesen, der bei hostname angegeben wurde.

Parameter-Liste

hostname

Der SNMP-Agent (Server).

community

Die "read community".

object_id

Wenn null, wird object_id als Wurzel des SNMP-Objektbaums interpretiert und alle Objekte in diesem Baum werden als Array zurückgegeben.

Wird object_id angegeben, werden alle SNMP-Objekte unter dieser object_id zurückgegeben.

timeout

Die Anzahl der Mikrosekunden bis zum ersten Timeout.

retries

Die Anzahl der Wiederholungsversuche, wenn Timeouts auftreten.

Rückgabewerte

Gibt ein Array von SNMP-Objektwerten, beginnend mit object_id als Wurzel, zurück oder false im Fehlerfall.

Beispiele

Beispiel #1 snmpwalk()-Beispiel

<?php
$a
= snmpwalk("127.0.0.1", "public", "");

foreach (
$a as $val) {
echo
"$val\n";
}

?>

Der obige Funktionsaufruf gibt alle SNMP-Objekte des SNMP-Agenten, der auf localhost läuft, zurück. In einer Schleife können alle Werte durchlaufen werden.

Siehe auch

  • snmprealwalk() - Return all objects including their respective object ID within the specified one

add a note add a note

User Contributed Notes 9 notes

up
3
Lars Troen
21 years ago
Note that there's different behaviuor in php snmpwalk and ucd snmpwalk. If you try to walk an oid that has one value not under a subkey of the walked oid, ucd snmpwalk will return the value while php's snmpwalk will not.
up
1
anders at ei dot nu
21 years ago
It would be nice to be able to specify what snmp version to use ( 1,2c,3 )

For now, I'ts hardcoded in ext/snmp/snmp.c

change session.version from 1 to 2c or 3 if you need for now..

i.e

session.version = SNMP_VERSION_1;

to:
session.version = SNMP_VERSION_2c;
up
0
http://mike.eire.ca
19 years ago
I found on Windows (PHP 5) an empty string did not return anything, it just timed out.  I had to use null instead:

<?php
$a
= snmpwalk("127.0.0.1", "public", null);
?>
up
0
steve at ourabode dot org
22 years ago
Timeout is in MICRO seconds.
1,000,000 &micros = 1 s
up
0
layer2 at www dot com
23 years ago
Something to care about in dealing with snmpwalk:<BR>
While walking the MIB, snmpwalk puts info that gets into an array, and that is correct.<BR>
The trouble happened when snmpwalk needs to collect information from instances that contains subinstances (i.e. walking .1.2.3.4.5 and having instances like 1.1, 1.2, 1.3): in this case it gets info and passes into an array, but when walking the array, each value is preceeded by 'Counter32: '.<BR>
I've tested this in many ways and it always happened the same way.
up
0
john at antefacto dot com
23 years ago
Ah. That's why all of our SNMP stuff was timing out anytime there was any load on the system. Sigh. A waste of two weeks trying to debug snmp....

Even the snmpcmd manpage doesn't give a
unit for timeout.
up
0
billf at freebsd dot org
23 years ago
for the poster wondering what the
timeout field was measured in:

from the ucd-snmp header file snmp_api.h:

    long    timeout;
    /* Number of uS until first timeout
    then exponential backoff */
up
0
jmartinson(AT_nospam)info234.com
23 years ago
A quick router device view:

<?
include "header.html";

$host = "auscr1";
$community = "tellme";
                    
$sysDescr = snmpget("$host","$community","system.sysDescr.0");
$ifDescr = snmpwalk("$host","$community","interfaces.ifTable.ifEntry.ifDescr");
$ifIndex = snmpwalk("$host","$community","interfaces.ifTable.ifEntry.ifIndex");
$ifAdminStatus = snmpwalk("$host","$community","interfaces.ifTable.ifEntry.ifAdminStatus");
$ifOperStatus = snmpwalk("$host","$community","interfaces.ifTable.ifEntry.ifOperStatus");
$ifLastChange = snmpwalk("$host","$community","interfaces.ifTable.ifEntry.ifLastChange");
                                         
print
"<table border=1 bgcolor=#ffffff><tr><td>$host</td></tr></table><br>";
print
"<table border=1 bgcolor=#ffffff><tr><td>$sysDescr</td></tr></table><br>";
print
"<table border=1 bgcolor=#ffffff>";
print
"<tr>
        <td>ifIndex</td>
        <td>ifDescr</td>
        <td>ifAdminStatus</td>
        <td>ifOperStatus</td>
        <td>ifLastChange</td>
        </tr>"
;
            
for (
$i=0; $i<count($ifIndex); $i++) {
        print
"<tr>";
        print
"<td>$ifIndex[$i]</td>";
        print
"<td>$ifDescr[$i]</td>";
        print
"<td>$ifAdminStatus[$i]</td>";
        print
"<td>$ifOperStatus[$i]</td>";
        print
"<td>$ifLastChange[$i]</td>";
        print
"</tr>";
}           
print
"</table>";

?>
up
-1
bobby [dot] clark [at] eku [dot] edu
21 years ago
I had to use an object_id like these.
'SNMPv2-MIB::system.sysDescr.0'
'IF-MIB::interfaces.ifTable.ifEntry.ifAdminStatus'

<?php
$host
= '192.168.1.1';
$community = 'public';
$object_id = 'IF-MIB::interfaces.ifTables.ifEntry.ifAdminStatus';

$sysdesc = snmpwalk($host, $community', $object_id);
print_r($sysdesc);
?>
To Top