gpt4 book ai didi

python - 如何在 PySNMP 中进行单个 GETNEXT 查询

转载 作者:太空宇宙 更新时间:2023-11-03 19:24:34 25 4
gpt4 key购买 nike

我正在尝试创建一个简单的 snmp GETNEXT 查询来检索树层次结构中给定 OID 的下一项。

例如,我想要的是:

当我使用 OID 1.3.6.1.2.1.1 (iso.org.dod.internet.mgmt. mib-2.system)

我希望得到一个单一响应,包括 OID 1.3.6.1.2.1.1.1.0 (iso.org.dod.internet .mgmt.mib-2.system.sysDescr.0) 及其相应的值。

事实是:

PySNMP 不再检索单个下一个值,而是在 1.3.6.1.2.1.1 下执行 SNMP 遍历并检索所有子项。

如何更改此行为并使其仅返回单个下一个值而不是执行 snmpwalk?

我使用以下代码,该代码取自 PySNMP 文档。

# GETNEXT Command Generator
from pysnmp.entity.rfc3413.oneliner import cmdgen

errorIndication, errorStatus, errorIndex, \
varBindTable = cmdgen.CommandGenerator().nextCmd(
cmdgen.CommunityData('test-agent', 'public'),
cmdgen.UdpTransportTarget(('localhost', 161)),
(1,3,6,1,2,1,1)
)

if errorIndication:
print errorIndication
else:
if errorStatus:
print '%s at %s\n' % (
errorStatus.prettyPrint(),
errorIndex and varBindTable[-1][int(errorIndex)-1] or '?'
)
else:
for varBindTableRow in varBindTable:
for name, val in varBindTableRow:
print '%s = %s' % (name.prettyPrint(), val.prettyPrint())

最佳答案

@Cankut,pysnmp 的“oneliner”GETNEXT API 的工作原理是检索给定前缀下的所有 OID 或直到 mib 结尾的所有 OID。

执行您想要的操作的一种方法是将 pysnmp 的股票响应处理函数替换为您自己的(这还需要使用较低级别的异步 API):

from pysnmp.entity.rfc3413.oneliner import cmdgen

def cbFun(sendRequestHandle, errorIndication, errorStatus, errorIndex,
varBindTable, cbCtx):
if errorIndication:
print(errorIndication)
return 1
if errorStatus:
print(errorStatus.prettyPrint())
return 1
for varBindRow in varBindTable:
for oid, val in varBindRow:
print('%s = %s' % (oid.prettyPrint(),
val and val.prettyPrint() or '?'))

cmdGen = cmdgen.AsynCommandGenerator()

cmdGen.nextCmd(
cmdgen.CommunityData('test-agent', 'public'),
cmdgen.UdpTransportTarget(('localhost', 161)),
((1,3,6,1,2,1,1),),
(cbFun, None)
)

cmdGen.snmpEngine.transportDispatcher.runDispatcher()

关于python - 如何在 PySNMP 中进行单个 GETNEXT 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8643047/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com