PHP Conference Japan 2024

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
Uunsigned int64
Isigned int64
Ffloat
Ddouble

這些大多數將使用顯而易見的對應 ASN.1 型別。's'、'x'、'd' 和 'b' 都是指定 OCTET STRING 值的不同方式,而 'u' 無符號型別也用於處理 Gauge32 值。

如果 MIB 檔案透過 "snmp_read_mib" 或在 libsnmp 設定中指定而載入到 MIB 樹中,則 '=' 可用作所有物件 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 主機拒絕資料型別,則會顯示類似「Warning: Error in packet. Reason: (badValue) The value given has the wrong type or length.」的 E_WARNING 訊息。如果指定不明或無效的 OID,警告可能會顯示「Could not add variable」。

範例

範例 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');
?>

參見

新增註解

使用者貢獻的註解 3 則註解

0
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');
0
deivis dot jakstas at gmail dot com
17 年前
如果設定十六進位值,正確格式為
snmpset($source_ip,$community,"$oid","x","10 10 10 10");
0
slawrance at technologist dot com
25 年前
"type" 參數必須是以下之一,取決於要在 SNMP 主機上設定的變數型別

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

如果在編譯 SNMP 函式庫時定義了 OPAQUE_SPECIAL_TYPES,則
以下也是有效的

U unsigned int64
I signed int64
F float
D double

例如,使用 "i" 會設定整數,而 "s" 會設定字串。如果 SNMP 主機拒絕資料型別,您可能會收到以下訊息:「Warning: Error in packet. Reason: (badValue) The value given has the wrong type or length.」

如果指定不明或無效的 OID,您可能會收到「Could not add variable」訊息。當指定完全為數值的絕對 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」。
To Top