2013-04-03 22 views
6

Tôi đang cố truy vấn biến SNMP trên thiết bị định tuyến của Cisco bằng Python và đang gặp khó khăn.Truy vấn OID số trong PySNMP?

Tôi có một lệnh snmpwalk rằng hoạt động tốt:

$snmpwalk -v2c -c <our_community_string> <device_ip_address> 1.3.6.1.4.1.9.9.42.1.2.10.1.1.950 
SNMPv2-SMI::enterprises.9.9.42.1.2.10.1.1.950 = Gauge32: 68 

Bây giờ tôi đang cố gắng để làm điều tương tự bằng Python sử dụng pysnmp.

tôi đã cố gắng sử dụng một cái gì đó dựa trên các ví dụ ở đây - http://pysnmp.sourceforge.net/examples/current/index.html - nhưng có một SmiError:

In [1]: from pysnmp.entity.rfc3413.oneliner import cmdgen 

In [2]: cmdGen = cmdgen.CommandGenerator() 

In [3]: errorIndication, errorStatus, errorIndex, varBinds = cmdGen.getCmd(
...:  cmdgen.CommunityData('0pe3aro'), 
...:  cmdgen.UdpTransportTarget(('10.65.113.28', 161)), 
...:  cmdgen.MibVariable('1.3.6.1.4.1.9.9.42.1.2.10.1.1.950', 0) 
...:) 

Nhưng tôi nhận được như sau:

SmiError: MIB file "1.3.6.1.4.1.9.9.42.1.2.10.1.1.950.py[co]" not found in search path 

Về cơ bản - Tôi muốn equavilent về điều này trong NetSNMP, nhưng trong PySNMP (http://ben.akrin.com/?p=1234).

Có ai biết cách đơn giản để truy vấn OID số trong PySNMP không?

Chúc mừng, Victor

Trả lời

4

Tôi tin rằng đoạn mã sau sẽ làm việc cho bạn:

from pysnmp.entity.rfc3413.oneliner import cmdgen 

cmdGen = cmdgen.CommandGenerator() 

errorIndication, errorStatus, errorIndex, varBinds = cmdGen.getCmd(
    cmdgen.CommunityData('public'), 
    cmdgen.UdpTransportTarget(('demo.snmplabs.com', 161)), 
    '1.3.6.1.2.1.1.3.0' 
) 

print('\n'.join([ '%s = %s' % varBind for varBind in varBinds])) 

Bạn có thể cắt & dán nó vào Python của bạn nhanh chóng thử và thử nghiệm với nó.

Đối tượng MibVariable có thể được sử dụng để tham chiếu đến biểu tượng MIB theo tên.