snmpwalk
(PHP 4, PHP 5, PHP 7, PHP 8)
snmpwalk — 从代理获取所有 SNMP 对象
说明
snmpwalk(
string
string
array|string
int
int
): array|false
string
$hostname
,string
$community
,array|string
$object_id
,int
$timeout
= -1,int
$retries
= -1): array|false
snmpwalk() 函数用于从 hostname
指定的 SNMP 代理读取所有值。
参数
hostname
-
SNMP 代理(服务器)。
community
-
The read community.
object_id
-
如果为
null
,则将object_id
作为 SNMP 对象树的根,并且该树下的所有对象都作为数组返回。如果指定了
object_id
,则返回该object_id
下面的所有 SNMP 对象。 timeout
-
第一次超时前的微秒数。
retries
-
发生超时时重试的次数。
返回值
返回从 object_id
开始的 SNMP 对象值数组,如 root 或错误时为 false
。
示例
示例 #1 snmpwalk() 示例
<?php
$a = snmpwalk("127.0.0.1", "public", "");
foreach ($a as $val) {
echo "$val\n";
}
?>
上面的函数调用将从本地主机上运行的 SNMP 代理返回所有 SNMP 对象。 可以通过循环遍历这些值
+添加备注
用户贡献的备注 10 notes
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.
anders at ei dot nu ¶
22 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;
smcbride at msn dot com ¶
4 months ago
snmpwalk and other snmp functions really need to support an optional port.
In the corporate world it is very common to change the port for SNMP from 161 to some other port for security. It is a simple security obfuscation, but a lot of bots will scan well known ports for attack vectors. For example, we used to change ours to something like 1161 just to prevent making it easy.
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.
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.
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 */
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>";
?>
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);
?>
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);
?>