2016-10-19 14 views
0

戻りoctectstring値をpysnmpことができます。は、私がPySnmpでSNMPトラップを取得するために小さなスクリプトをやっているだけ

私はoid = value pairsを取得することができていますが、その値は、最終的には小さな情報では長すぎます。 は、値の最後にあるのオクテット文字列にはどうすればアクセスできますか。文字列操作以外の方法がありますか?コメントしてください。

OID = _BindValue(たcomponentType = NamedTypes(NamedType( '値'、ObjectSyntax --------------------------- ---------------------(DELETED)-----------------(なし、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から変数バインディングのシーケンスを取得したら、VALUE1にアクセスするには、例えば、あなたがかもしれません操作を行います。

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

を(それは文字列だと仮定)をvalue1の尾の部分にアクセスするには、単にそれを購読することができます:

tail_of_value1 = value1[-10:] 

私はあなたの質問では、それらのシーケンスではなく、単一のvariable_bindingで動作すると思います。

oid-valueペアを(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'])) 
関連する問題