PHPのお勉強!

PHP TOP

snmpwalk

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

snmpwalkエージェントから全ての SNMP オブジェクトを取得する

説明

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

snmpwalk() 関数は、hostname で指定した SNMP エージェントから全ての値を読みとるのに使用します。

パラメータ

hostname

SNMP エージェント (サーバー)。

community

リードコミュニティ。

object_id

null の場合は、object_idSNMP オブジェクトツリーのルートとして解釈され、 ツリーの配下のすべてのオブジェクトを配列として返します。

object_id を指定した場合は、 その object_id の配下のすべての SNMP オブジェクトを返します。

timeout

最初のタイムアウトまでのマイクロ秒数。

retries

タイムアウト発生時の再試行回数。

戻り値

object_id() からの SNMP オブジェクトの値の配列をルートとして返します。 エラーの場合に false を返します。

例1 snmpwalk() の例

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

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

?>

上記の関数コールは、ローカルホスト上で稼働する SNMP エージェントからすべての SNMP オブジェクトを返します。 ループ処理により値を一つずつとりだすことができます。

参考

  • snmprealwalk() - 指定したオブジェクトに関するオブジェクト ID を含むすべてのオブジェクトを返す

add a note

User Contributed Notes 10 notes

up
2
steve at ourabode dot org
22 years ago
Timeout is in MICRO seconds.
1,000,000 &micros = 1 s
up
2
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
smcbride at msn dot com
2 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.
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
-3
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
-4
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