如何在 Netgear GS710TUP 上使用 pySNMP 启用/禁用 PoE 端口

在我们之前的文章如何使用 pySNMP 从 Netgear GS710TUP 查询 SNMPv3 信息中,我们展示了如何将 pySNMP 连接到 Netgear GS710TUP 以查询简单信息。

以下示例脚本是 如何使用 SNMPv3 在 Netgear GS710TUP 上启用/禁用 PoE 端口电源的 pySNMP 等效脚本:它设置 1.3.6.1.2.1.105.1.1.1.3 (pethPsePortAdminEnable) 中的相关 OID。

GS710TUP 有 8 个 PoE 端口,以下是各个端口的可用 OID:

poe_oids.txt
1.3.6.1.2.1.105.1.1.1.3.1.1 # Port 1
1.3.6.1.2.1.105.1.1.1.3.1.2 # Port 2
1.3.6.1.2.1.105.1.1.1.3.1.3 # Port 3
1.3.6.1.2.1.105.1.1.1.3.1.4 # Port 4
1.3.6.1.2.1.105.1.1.1.3.1.5 # Port 5
1.3.6.1.2.1.105.1.1.1.3.1.6 # Port 6
1.3.6.1.2.1.105.1.1.1.3.1.7 # Port 7
1.3.6.1.2.1.105.1.1.1.3.1.8 # Port 8

在我们的示例中,我们将启用端口 1 的电源:

pysnmp_set_port.py
import pysnmp.hlapi as snmp

portNumber = 1

iterator = snmp.setCmd(
    snmp.SnmpEngine(),
    snmp.UsmUserData('admin', 'SWITCH_ADMIN_PASSWORD',
                     authProtocol=snmp.usmHMACSHAAuthProtocol,
                     privProtocol=snmp.usmNoPrivProtocol),
    snmp.UdpTransportTarget(('SWITCH_IP_ADDRESS', 161)),
    snmp.ContextData(),
    snmp.ObjectType(
        snmp.ObjectIdentity(f'1.3.6.1.2.1.105.1.1.1.3.1.{portNumber}'),
        snmp.Integer(1))
)

errorIndication, errorStatus, errorIndex, varBinds = next(iterator)

if errorIndication:
    print(errorIndication)
elif errorStatus:
    idx = int(errorIndex) - 1
    location = errorIndex and varBinds[idx][0] or '?'
    print(f"{errorStatus.prettyPrint()} at {location}")
else: # Success
    for varBind in varBinds:
        print(' = '.join([x.prettyPrint() for x in varBind]))

禁用端口 1 的电源,替换

snmp_integer_enable.py
snmp.Integer(1)

snmp_integer_disable.py
snmp.Integer(2)

注意 1 值表示布尔 true(如启用 PoE 输出),而 2 表示布尔 false,禁用端口上的 PoE 输出。


Check out similar posts by category: Networking, PoE, Python, SNMP