標籤:python
SNMP標準引入一組ASN.1語言元素,稱之為SMI(Structure of ManagementInformation)。由SMI描述的相互關聯的被管對象(Managed Objects)組成MIB(ManagementInformation Base)模組。
核心MIB中經常用到的ManagedObjects成為SNMP標準的一部分。剩下的MIB一般由裝置生產商在其裝置中建立。(也就是說這些MIB是生產商和裝置相關的)
PySNMP是一個純粹用Python實現的SNMP。
用PySNMP的最抽象的API為One-lineApplications。其中有兩類API:同步的和非同步的,都在模組pysnmp.entity.rfc3413.oneliner.cmdgen 中實現。
所以在使用的時候為了方便,可以
from pysnmp.entity.rfc3413.oneliner import cmdgen然後用cg = cmdgen.CommandGenerator()來產生一個CommandGenerator對象,以後調用cg的getCmd等方法來擷取或者設定網路裝置資訊。
getCmd()需要三個參數:
1.cmdgen.CommunityData() ##社區資訊 傳入三個資料,安全my-agent、社區名public、snmp協議版本,之間用逗號隔開,例如 cmdgen.CommunityData(‘my-agent‘, ‘public‘, 1)
2.cmdgen.UdpTransportTarget() ##通道參數,傳入一個元組,包含主機IP/網域名稱和連接埠,例如:cmdgen.UdpTransportTarget((‘192.168.70.237‘, 161)
3. OID ##mib值,例如 ‘.1.3.6.1.4.1.1800.5.13.2‘
注意:三個參數之間用 ","隔開。
下面上個例子是獲得裝置snmp資料:
from pysnmp.entity.rfc3413.oneliner import cmdgendef snmpget(): cg = cmdgen.CommandGenerator() ##獲得CommandGenerator對象 errorIndication, errorStatus, errorIndex, varBinds = cg.getCmd( #0代表v1,1代表v2c cmdgen.CommunityData(‘my-agent‘, ‘public‘, 1), ##社區資訊,my-agent ,public 表示社區名,1表示snmp v2c版本,0為v1版本 cmdgen.UdpTransportTarget((‘192.168.70.237‘, 161)),##這是傳輸的通道,傳輸到IP 192.168.70.237, 連接埠 161上(snmp標準預設161 UDP連接埠) ‘.1.3.6.1.4.1.1800.5.13.2‘ ##傳送的OID,個人認為MIB值 ) print str(varBinds[0][1]); ##varBinds返回是一個stulp,含有MIB值和獲得值def runit(loop=1): for i in range(loop): snmpget() #print i if __name__ == "__main__": runit(loop=1)
參考:http://blog.sina.com.cn/s/blog_54ce569c01009ccb.html
本文出自 “Lingx” 部落格,請務必保留此出處http://13907664629.blog.51cto.com/8787187/1631278
python pysnmp使用