我正在尝试使用 lextudio/pysnmp 发送 snmp v1/v2 get 请求。我一直在尝试使用示例代码:
import asyncio
from pysnmp.hlapi.v1arch.asyncio import *
async def run():
snmpDispatcher = SnmpDispatcher()
iterator = await getCmd(
snmpDispatcher,
CommunityData("public", mpModel=0),
await UdpTransportTarget.create(("demo.pysnmp.com", 161)),
("1.3.6.1.2.1.1.1.0", None),
)
errorIndication, errorStatus, errorIndex, varBinds = iterator
if errorIndication:
print(errorIndication)
elif errorStatus:
print(
"{} at {}".format(
errorStatus.prettyPrint(),
errorIndex and varBinds[int(errorIndex) - 1][0] or "?",
)
)
else:
for varBind in varBinds:
print(" = ".join([x.prettyPrint() for x in varBind]))
snmpDispatcher.transportDispatcher.closeDispatcher()
asyncio.run(run())
但是我没有看到为请求设置超时/重试次数的选项,因此程序将无限期地运行错误的请求。有谁知道有什么好方法吗?
正如文档站点中所写,使用此包的许多技巧都在单元测试用例中。
await UdpTransportTarget.create(("1.2.3.4", 161), timeout=1, retries=0)