2016-10-19 77 views
0

我正在做一個小腳本來獲取與PySnmp的SNMP陷阱。可以pysnmp只返回octectstring值

我能夠得到oid = value pairs,但最終得到的信息太小而且價值太高。我如何訪問僅在值的末尾出現的octectstring。除了字符串操作還有其他方法嗎?請給出意見。

OID = _BindValue(組件類型= NamedTypes(NamedType( '值',ObjectSyntax --------------------------- ---------------------(DELETED)-----------------(None,OctetString(b'New報警「))))

是否有可能得到像下面這樣的輸出,可從另一個SNMP客戶端:

.iso.org.dod.internet.private.enterprises .xxxx.1.1.2.2.14:C M_DAS報警陷阱:

編輯 - 代碼是:

**for oid, val in varBinds: 
     print('%s = %s' % (oid.prettyPrint(), val.prettyPrint())) 
     target.write(str(val))** 

在屏幕上,它表明,短時間,但在文件中,VAL是那麼的漫長。

target.write(str(val[0][1][2]))的使用不適用於所有(程序停止,但出現錯誤),但第一個oid(時間滴答)得到它罰款。

如何從尾部獲得值,因爲在所有oid中都找到實際值。

謝謝。

回答

0

SNMP的OID值對序列的形式稱爲傳送信息的變量綁定:

variable_bindings = [[oid1, value1], [oid2, value2], ...] 

一旦你從SNMP PDU變量綁定序列,訪問值1,例如,你可能更多信息:

variable_binding1 = variable_bindings[0] 
value1 = variable_binding1[1] 

要訪問值1的尾部(假設它是一個字符串),你可以簡單地訂閱它:

tail_of_value1 = value1[-10:] 

我想你的問題你操作一個variable_binding,而不是他們的序列。

如果您希望pysnmp將oid值對轉換爲人類友好的表示形式(MIB對象名稱,MIB對象值),您必須將原始OID值對傳遞給ObjectType類並運行它MIB解析器,如文檔中所述。

+0

請參閱編輯。你能否糾正這些代碼? – Manmathan

0

謝謝... 下面的代碼就像somwwhat我一直在尋找。

  if str(oid)=="1.3.6.1.2.1.1.3.0": 
       target.write(" = str(val[0][1]['timeticks-value']) = " +str(val[0][1]['timeticks-value'])) # time ticks 

      else: 
       target.write("= val[0][0]['string-value']= " + str(val[0][0]['string-value']))