ツリー階層内の特定のOIDの次のアイテムのみを取得するための単純なsnmpGETNEXTクエリを作成しようとしています。
たとえば、私が欲しいのは次のとおりです。
OID 1.3.6.1.2.1.1(iso.org.dod.internet.mgmt.mib-2.system)でGETNEXTリクエストを行うと
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())