PYSNMP 转 on/off 切换端口

PYSNMP turn on/off switch ports

我刚开始使用 PYSNMP 协议,我正在尝试通过 SNMP 协议从交换机断开和连接端口。 我已经有一个与计算机通信的交换机,在本例中将是 raspberry pi 3,但我需要一个 python 脚本来为我执行此操作。我已经设法将 PYSNMP 库导入到我的 scipt 中,我所知道的是我很可能必须使用 SET 和 GET 函数来更改端口的状态,从 shutdonw 到不关闭,但我没有知道怎么做或者我可以从哪里开始。你能帮助我吗?你需要知道什么我才能成功,我可以告诉你什么?

您知道您的交换机支持基于 SNMP 的端口管理吗?这实际上取决于交换机,翻转端口的方式通常是特定于供应商的,应该在交换机文档 and/or MIB 文件中进行描述。

我的建议是首先像这样使用您的交换机尝试 SNMP:

$ snmpset -v2c -c <community> <hostname> IF-MIB::ifAdminStatus.interface.1 = up

$ snmpset -v2c -c <community> <hostname> IF-MIB::ifAdminStatus.interface.1 = down

其中 1 是端口 #0 索引。默认情况下,写入 SNMP 社区字符串可能设置为 private

尽管您的交换机可能使用其他一些 MIB 对象进行端口管理或根本不支持 SNMP。

一旦您弄清楚如何将 SNMP 用于您的目的,您就可以在 pysnmp 中表达它 like this

编辑:

from pysnmp.hlapi import *

setcommunity = 'private'
host = 'demo.snmplabs.com'
port = 1

snmp_engine = SnmpEngine()

set_gen = setCmd(snmp_engine,
                 CommunityData(setcommunity),
                 UdpTransportTarget((host, 161)),
                 ContextData(),
                 ObjectType(ObjectIdentity('SNMPv2-SMI', 'mib-2', '105.1.1.1.3.1.%d' % port), Integer(2)))

errorIndication, errorStatus, errorIndex, varBinds = next(set_gen)
if errorIndication or errorStatus:
    print('SNMP error: %s' % errorIndication or errorStatus)
else:
    print('SNMP succeeded')

请记住,您可以通过单个 SNMP 命令翻转许多(几十个)端口。