pysnmp
ではなく、netsnmp
モジュールを使用しているようです。
あなたがpysnmp
を使用したい場合は、this exampleは助けることがあります。
from pysnmp.hlapi import *
for (errorIndication,
errorStatus,
errorIndex,
varBinds) in nextCmd(SnmpEngine(),
CommunityData('public', mpModel=0),
UdpTransportTarget(('demo.snmplabs.com', 161)),
ContextData(),
ObjectType(ObjectIdentity('1.3.6.1.2.1.17.7.1.2.2.1.2'))):
if errorIndication or errorStatus:
print(errorIndication or errorStatus)
break
else:
for varBind in varBinds:
print(' = '.join([x.prettyPrint() for x in varBind]))
がUPDATE:
上記のループが反復ごとにOID値を取得します。より効率的にデータをフェッチしたい場合は、より多くのOIDをクエリーに埋め込みます(多くの形式ではObjectType(...)
の形式)。
また、nextCmd
コールをbulkCmd
like thisに変更することで、GETBULK PDUタイプに切り替えることができます。
from pysnmp.hlapi import *
for (errorIndication,
errorStatus,
errorIndex,
varBinds) in bulkCmd(SnmpEngine(),
CommunityData('public'),
UdpTransportTarget(('demo.snmplabs.com', 161)),
ContextData(),
0, 25, # fetch up to 25 OIDs one-shot
ObjectType(ObjectIdentity('1.3.6.1.2.1.17.7.1.2.2.1.2'))):
if errorIndication or errorStatus:
print(errorIndication or errorStatus)
break
else:
for varBind in varBinds:
print(' = '.join([x.prettyPrint() for x in varBind]))
GETBULKコマンドのサポートが最初にあなたはSNMP v1の上でそれを使用することはできませんでのSNMP V2C、で導入されたことを覚えておいてください。
ご返信ありがとうございます。あなたのスニペットを試みましたが、すべてのデータが取得されませんでした。どんなアイデア、なぜそれが好き? – kit
@IIya Etingof-一度に複数のOIDデータを取得する方法は何ですか? – kit
@kit私の答えが更新されました。これが必要なものかどうか教えてください –