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 命令翻转许多(几十个)端口。
我刚开始使用 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 命令翻转许多(几十个)端口。