2017-06-13 34 views
0

我想使用python的pysnmp庫來獲取snmp數據。在數據中有些COUNTER64對象可用,但沒有得到檢索。如何檢索pysnmp中的Counter64對象?

命令 -

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

輸出 -

.1.3.6.1.4.1.16136.13.5.1.200.1.51.1.12.1 = Counter64: 2761552407 
.1.3.6.1.4.1.16136.13.5.1.200.1.51.1.12.2 = Counter64: 0 
.1.3.6.1.4.1.16136.13.5.1.200.1.51.1.12.3 = Counter64: 0 
.1.3.6.1.4.1.16136.13.5.1.200.1.51.1.13.1 = Counter64: 2299496 
.1.3.6.1.4.1.16136.13.5.1.200.1.51.1.13.2 = Counter64: 0 
.1.3.6.1.4.1.16136.13.5.1.200.1.51.1.13.3 = Counter64: 0 

使用pysnmp -

from pysnmp.hlapi import * 

for (errorIndication, 
    errorStatus, 
    errorIndex, 
    varBinds) in nextCmd(SnmpEngine(), 
          CommunityData('public', mpModel=0), 
          UdpTransportTarget(('ip', port)), 
          ContextData(), 
          ObjectType(ObjectIdentity('.1.3.6.1.4.1.16136.13.5.1.200.1.51.1.12'))): 
    if errorIndication or errorStatus: 
     print(errorIndication or errorStatus) 
     break 
    else: 
     for varBind in varBinds: 
      print(' = '.join([x.prettyPrint() for x in varBind])) 

輸出 -

No SNMP response received before timeout 

我該如何檢索COUNTER64對象?我錯過了什麼嗎?

回答

1

只能通過SNMP版本2c和3使用Counter64值。根據RFC,SNMP版本1不支持該值。

要將pysnmp切換到SNMPv2c,只需設置mpModel=1或刪除mpModel參數以使用默認值(即v2c)生成pysnmp。

這裏是doc

+0

@IIya Etingof-這意味着,我想要的是不可能的?因爲根據** snmpwalk -v 1 -c public xyz :: pqr **命令它是版本1. – kit

+0

@kit嘗試運行'snmpwalk -v1 -c public demo.snmplabs.com IF-MIB :: ifXTable '並將其與'snmpwalk -v2c -c public demo.snmplabs.com IF-MIB :: ifXTable'進行比較。在SNMPv1上運行時,正確的SNMPv1引擎應該放棄Counter64值。看起來這是snmpwalk所做的。 –

+0

@IIya Etingof-在我的情況下,snmpwalk -v 1 -c public xyz :: pqr命令不會丟棄Counter64值。我能夠檢索所有的值,只有Counter64值不被檢索。有沒有其他的方式來做到這一點,因爲在java中,我們可以設置SNMP4JSettings.setAllowSNMPv2InV1(true);屬性爲true。 – kit