(PHP 3, PHP 4, PHP 5)

snmpwalk -- 从代理返回所有的 SNMP 对象


array snmpwalk ( string hostname, string community, string object_id [, int timeout [, int retries]] )

返回由 object_id 作为根的 SNMP 对象值所组成的数组,错误则返回 FALSE

snmpwalk() 函数是用来读取所有由 hostname 指定的 SNMP 代理的值。Community 指定该代理中具有读权限的域。一个为 NULLobject_id 将被看作 SNMP 对象树的根,而在此树下的所有对象将作为一个数组被返回。如果指定了 object_id,则返回所有在 object_id 下的 SNMP 对象。

= snmpwalk("", "public", "");

上边的函数调用将从运行于本机的 SNMP 代理那里返回所有的 SNMP 对象。可使用循环遍历这些值。

for ($i=0; $i < count($a); $i++) {

add a note add a note User Contributed Notes
24-Mar-2005 02:54
I found on Windows (PHP 5) an empty string did not return anything, it just timed out.  I had to use null instead:

= snmpwalk("", "public", null);
bobby [dot] clark [at] eku [dot] edu
18-Sep-2003 05:29
I had to use an object_id like these.

= '';
$community = 'public';
$object_id = 'IF-MIB::interfaces.ifTables.ifEntry.ifAdminStatus';

$sysdesc = snmpwalk($host, $community', $object_id);
Lars Troen
14-Mar-2003 07:18
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.
anders at ei dot nu
30-Jan-2003 02:11
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..


session.version = SNMP_VERSION_1;

session.version = SNMP_VERSION_2c;
steve at ourabode dot org
26-Mar-2002 07:54
Timeout is in MICRO seconds.
1,000,000 &micros = 1 s
layer2 at www dot com
29-Aug-2001 11:52
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 . 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.
john at antefacto dot com
17-Aug-2001 11:21
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.
billf at freebsd dot org
01-Aug-2001 05:22
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 */
20-Jun-2001 10:41
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");
"<table border=1 bgcolor=#ffffff><tr><td>$host</td></tr></table><br>";
"<table border=1 bgcolor=#ffffff><tr><td>$sysDescr</td></tr></table><br>";
"<table border=1 bgcolor=#ffffff>";
for (
$i=0; $i<count($ifIndex); $i++) {