snmpset

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

snmpset设置 SNMP 对象的值

描述

snmpset(
    string $hostname,
    string $community,
    array|string $object_id,
    array|string $type,
    array|string $value,
    int $timeout = -1,
    int $retries = -1
): bool

snmpset() 用于设置由 object_id 指定的 SNMP 对象的值。

参数

hostname

SNMP 代理(服务器)的主机名。

community

写入社区。

object_id

SNMP 对象 ID。

type

MIB 定义了每个对象 ID 的类型。它必须从以下列表中指定为单个字符。

types
=类型取自 MIB
iINTEGER
uINTEGER
sSTRING
xHEX STRING
dDECIMAL STRING
nNULLOBJ
oOBJID
tTIMETICKS
aIPADDRESS
bBITS

如果在编译 SNMP 库时定义了 OPAQUE_SPECIAL_TYPES,则以下也是有效的

types
U无符号 int64
I有符号 int64
Ffloat
Ddouble

大多数这些将使用明显的对应 ASN.1 类型。's'、'x'、'd' 和 'b' 都是指定 OCTET STRING 值的不同方式,'u' 无符号类型也用于处理 Gauge32 值。

如果 MIB 文件通过 "snmp_read_mib" 加载到 MIB 树中,或者通过在 libsnmp 配置中指定它加载,则 "=" 可用作所有对象 ID 的 type 参数,因为类型可以从 MIB 中自动读取。

请注意,有两种方法可以设置类型为 BITS 的变量,例如 "SYNTAX BITS {telnet(0), ftp(1), http(2), icmp(3), snmp(4), ssh(5), https(6)}"

  • 使用类型 "b" 和位号列表。不推荐使用此方法,因为对同一 OID 的 GET 查询将返回例如 0xF8。
  • 使用类型 "x" 和十六进制数,但没有(!) 通常的 "0x" 前缀。

有关更多详细信息,请参见示例部分。

value

新值。

timeout

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

retries

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

返回值

成功时返回 true,失败时返回 false

如果 SNMP 主机拒绝数据类型,则会显示类似于 "警告:数据包错误。原因:(badValue) 给定的值类型或长度不正确。" 的 E_WARNING 消息。如果指定了未知或无效的 OID,则警告可能显示为 "无法添加变量"。

示例

示例 #1 使用 snmpset()

<?php
snmpset
("localhost", "public", "IF-MIB::ifAlias.3", "s", "foo");
?>

示例 #2 使用 snmpset() 设置 BITS SNMP 对象 ID

<?php
snmpset
("localhost", "public", 'FOO-MIB::bar.42', 'b', '0 1 2 3 4');
// 或
snmpset("localhost", "public", 'FOO-MIB::bar.42', 'x', 'F0');
?>

参见

添加备注

用户贡献的备注 4 个备注

ch at lathspell dot de
14 年前
请注意,有两种方法可以设置类型为 BITS 的变量,例如
SYNTAX BITS {telnet(0), ftp(1), http(2), icmp(3), snmp(4), ssh(5), https(6)}

1. 使用类型 "b" 和位号列表,例如
snmpset('FOO-MIB::bar.42', 'b', '0 1 2 3 4');
缺点是成功不易验证,因为对同一 OID 的 snmpget() 将返回例如 0xF8。

2. 使用类型 "x" 和十六进制数,但没有(!) 通常的 "0x" 前缀
snmpset('FOO-MIB::bar.42', 'x', 'F0');
deivis dot jakstas at gmail dot com
17 年前
如果设置十六进制值,则正确的格式是
snmpset($source_ip,$community,"$oid","x","10 10 10 10");
slawrance at technologist dot com
25 年前
"type" 参数必须是以下之一,具体取决于要设置在 SNMP 主机上的变量类型

i INTEGER
u 无符号 INTEGER
t TIMETICKS
a IPADDRESS
o OBJID
s STRING
x HEX STRING
d DECIMAL STRING
n NULLOBJ
b BITS

如果在编译 SNMP 库时定义了 OPAQUE_SPECIAL_TYPES,则
以下也是有效的

U 无符号 int64
I 有符号 int64
F float
D double

例如,使用 "i" 将设置一个整数,而 "s" 将设置一个字符串。如果 SNMP 主机拒绝数据类型,您可能会收到以下消息:"警告:数据包错误。原因:(badValue) 给定的值类型或长度不正确。"。

如果指定了未知或无效的 OID,您可能会收到 "无法添加变量" 消息。当指定一个完全是数字的绝对 OID(已经解析的 OID)时,请在它前面加上一个点。例如,可以启用/禁用 Asante 集线器上的以太网端口的 OID 可能是 "1.3.6.1.2.1.22.1.3.1.1.3.6.4.0",但您需要在 OID 参数中使用 "。1.3.6.1.2.1.22.1.3.1.1.3.6.4.0",以便 SNMP 库不会尝试解析已经解析的 OID。友好的未解析 OID 不需要在前面加上点,例如 "system.SysContact.0"
tridman
17 年前
如果已使用 "snmp_read_mib" 将 MIB 文件导入 MIB 树,则可以使用 "=" 作为 "type" 参数。
在这种情况下,类型也将从加载的 mib 文件中获取。(尽管八位字节字符串将被解释为字符串)
这在更动态地使用 snmpset 时非常有用。
To Top