How to get SNMP data using pysnmp?

匿名 (未验证) 提交于 2019-12-03 01:18:02

问题:

I want to get snmp data by using python pysnmp module. I was using command line to get SNMP data but now I want to read it using pysnmp module.

SNMP command -

snmpwalk -v 1 -c public <ip address>:<port> xyz::pqr 

I was using command like above. Now I tried something like below -

import netsnmp  def getmac():     oid = netsnmp.VarList(netsnmp.Varbind('.1.3.6.1.2.1.17.7.1.2.2.1.2'))     res = netsnmp.snmpgetbulk(oid, Version = 1, DestHost='ip',                            Community='pub')     return res  print getmac() 

I'm facing error - import netsnmp. No module netsnmp

Anyone can give me suggestion how I can get snmp data from the snmp server with python?

回答1:

You seem to be using the netsnmp module as opposed to the pysnmp.

If you want to use pysnmp, then this example may help:

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:

The above loop will fetch one OID-value per iteration. If you want to fetch data more efficiently, one option is to stuff more OIDs into the query (in form of many ObjectType(...) parameters).

Or you can switch onto the GETBULK PDU type which can be done by changing your nextCmd call into bulkCmd like this.

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])) 

Keep in mind that GETBULK command support was first introduced in SNMP v2c, that is you can't use it over SNMP v1.



标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!