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_id 视为 SNMP 对象树的根,并将该树下所有对象作为数组返回。

如果指定了 object_id,则返回该 object_id 下的所有 SNMP 对象。

timeout

第一次超时之前的微秒数。

retries

如果发生超时,重试的次数。

返回值

返回一个 SNMP 对象值的数组,从 object_id 作为根开始,或者在错误时返回 false

示例

示例 #1 snmpwalk() 示例

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

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

?>

上面的函数调用将返回运行在 localhost 上的 SNMP 代理中的所有 SNMP 对象。可以使用循环遍历这些值。

参见

  • snmprealwalk() - 返回所有对象,包括它们在指定对象内的各自对象 ID

添加注释

用户贡献的注释 9 个注释

2
steve at ourabode dot org
22 年前
超时以微秒为单位。
1,000,000 微秒 = 1 秒
2
Lars Troen
21 年前
请注意,php snmpwalk 和 ucd snmpwalk 的行为有所不同。如果你尝试遍历一个 oid,该 oid 的一个值不在遍历的 oid 的子键下,ucd snmpwalk 将返回该值,而 php 的 snmpwalk 则不会。
1
anders at ei dot nu
21 年前
能够指定要使用的 snmp 版本(1、2c、3)会很好。

目前,它在 ext/snmp/snmp.c 中是硬编码的。

如果目前需要,请将 session.version 从 1 更改为 2c 或 3。

例如

session.version = SNMP_VERSION_1;

改为
session.version = SNMP_VERSION_2c;
0
layer2 at www dot com
22 年前
处理 snmpwalk 时需要注意的一点:<BR>
遍历 MIB 时,snmpwalk 将信息放入数组中,这是正确的。<BR>
问题发生在 snmpwalk 需要从包含子实例的实例中收集信息时(例如,遍历 .1.2.3.4.5 并具有 1.1、1.2、1.3 等实例):在这种情况下,它会获取信息并将其传递给数组,但遍历数组时,每个值之前都带有“Counter32:”。<BR>
我已经用多种方法测试过,结果都是一样的。
0
john at antefacto dot com
22 年前
啊,这就是为什么我们所有的 SNMP 东西在系统有任何负载时都会超时。唉,浪费了两周时间来调试 snmp....

即使是 snmpcmd 手册页也没有给出
超时的单位。
0
billf at freebsd dot org
23 年前
对于想知道
超时字段以什么为单位测量的海报

来自 ucd-snmp 头文件 snmp_api.h

long timeout;
/* 第一次超时之前的 uS 数
然后是指数退避 */
0
jmartinson(AT_nospam)info234.com
23 年前
快速路由器设备视图

<?
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>";

?>
-1
http://mike.eire.ca
19 年前
我在 Windows(PHP 5)上发现空字符串没有返回任何内容,它只是超时。我不得不使用 null 代替

<?php
$a
= snmpwalk("127.0.0.1", "public", null);
?>
-4
bobby [dot] clark [at] eku [dot] edu
20 年前
我不得不使用像这样的 object_id。
'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