まず、PythonとPySNMPを使い慣れた人です。私はすべての物理インターフェイスに関する情報を取得するためにbulkCmdにネットワークデバイスのリストを渡そうとしています。PySNMP 4.4 with Python 2.7 bulkCmdの出力に子OIDが含まれていない
現在のところ、最初のインターフェイスを収集しているだけで、リスト内の次のネットワークデバイスに移動します。私は辞書編集とmaxCalls、繰り返しを変更しましたが、何も違いはありません。
単一のネットワークデバイスに単一のbulkCmdを送信すると、すべてのインターフェイスを正常にポーリングしました。
コード:
from pysnmp.hlapi import *
routers = ["router1", "router2"]
#adds routers to getCmd and bulkCmd
def snmpquery (hostip):
errorIndication, errorStatus, errorIndex, varBinds = next (
bulkCmd(SnmpEngine(),
CommunityData('communitystring'),
UdpTransportTarget((hostip, 161)),
ContextData(),
0, 50,
ObjectType(ObjectIdentity('IF-MIB', 'ifDescr')),
ObjectType(ObjectIdentity('IF-MIB', 'ifAlias')),
ObjectType(ObjectIdentity('IF-MIB', 'ifOperStatus')),
lexicographicMode=True
)
)
# Check for errors and print out results
if errorIndication:
print(errorIndication)
elif errorStatus:
print('%s at %s' % (errorStatus.prettyPrint(),
errorIndex and varBinds[int(errorIndex) - 1][0] or '?'))
else:
for varBind in varBinds:
print(' = '.join([x.prettyPrint() for x in varBind]))
# calls snmpquery for all routers in list
for router in routers:
snmpquery(router)
出力:
IF-MIB::ifDescr.1 = GigabitEthernet0/0
IF-MIB::ifAlias.1 = InterfaceDesc
IF-MIB::ifOperStatus.1 = 'up'
IF-MIB::ifDescr.1 = GigabitEthernet0/0
IF-MIB::ifAlias.1 = InterfaceDesc
IF-MIB::ifOperStatus.1 = 'up'
ありがとうございましたsoundstripe、これは完全に機能しました!私はまた、次の投稿時に私のインデントをチェックします。 – Ev9432