2016-04-05 12 views
0

私はpyagentx(snmpエージェントを拡張)をpythonで調べています。 https://github.com/rayed/pyagentxpyagentx snmp、コードはどのようにMIBにリンクされていますか?

サンプルコードがMIBにどのようにリンクされているかはわかりません。私は予想通り、私は出力を得るが、私はそれが働いているかが不明だコマンドを実行すると、ここでの例はclass NetSnmpTestMibTableNET-SNMP-EXAMPLES-MIB.txthttp://www.net-snmp.org/docs/mibs/NET-SNMP-EXAMPLES-MIB.txt

#!/usr/bin/env python 
# -*- coding: utf-8 -*- 

''' 
Rayed Alrashed 2015-06-14 
AgentX sub agent that implement some parts of NET-SNMP-EXAMPLES-MIB: 
<http://www.net-snmp.org/docs/mibs/NET-SNMP-EXAMPLES-MIB.txt> 
snmpwalk -v 2c -c public localhost NET-SNMP-EXAMPLES-MIB::netSnmpExampleScalars 
snmptable -v 2c -c public -Ci localhost NET-SNMP-EXAMPLES-MIB::netSnmpIETFWGTable 
Try snmpset: 
snmpset -v 2c -c public localhost NET-SNMP-EXAMPLES-MIB::netSnmpExampleInteger.0 i 10 
snmpset -v 2c -c public localhost NET-SNMP-EXAMPLES-MIB::netSnmpExampleInteger.0 i 200 
snmpset -v 2c -c public localhost NET-SNMP-EXAMPLES-MIB::netSnmpExampleString.0 s "Test" 
''' 

import time 
import random 
import pyagentx 

def str_to_oid(data): 
    length = len(data) 
    oid_int = [str(ord(i)) for i in data] 
    return str(length) + '.' + '.'.join(oid_int) 


class NetSnmpTestMibScalar(pyagentx.Updater): 

    def update(self): 
     self.set_INTEGER('1.0', 1000) 
     self.set_OCTETSTRING('3.0', 'String for NET-SNMP-EXAMPLES-MIB') 
     self.set_OBJECTIDENTIFIER('4.0', '1.2') 
     self.set_IPADDRESS('5.0', '127.0.0.1') 
     self.set_COUNTER32('6.0', 2000) 
     self.set_GAUGE32('7.0', 2000) 
     self.set_TIMETICKS('8.0', 1000000) 
     self.set_OPAQUE('9.0', 'Test') 
     self.set_COUNTER64('10.0', 2000) 


class NetSnmpTestMibTable(pyagentx.Updater): 

    def update(self): 
     # implement netSnmpIETFWGTable from NET-SNMP-EXAMPLES-MIB.txt 
     # Number of entries in table is random to show that MIB is reset 
     # on every update 
     for i in range(random.randint(3, 5)): 
      idx = str_to_oid('group%s' % (i+1)) 
      self.set_OCTETSTRING('1.1.2.' + idx, 'member 1') 
      self.set_OCTETSTRING('1.1.3.' + idx, 'member 2') 


class NetSnmpIntegerSet(pyagentx.SetHandler): 

    def test(self, oid, data): 
     if int(data) > 100: 
      raise pyagentx.SetHandlerError() 

    def commit(self, oid, data): 
     print "COMMIT CALLED: %s = %s" % (oid, data) 


class MyAgent(pyagentx.Agent): 

    def setup(self): 
     self.register('1.3.6.1.4.1.8072.2.1', NetSnmpTestMibScalar) 
     self.register('1.3.6.1.4.1.8072.2.2', NetSnmpTestMibTable) 
     self.register_set('1.3.6.1.4.1.8072.2.1.1.0', NetSnmpIntegerSet) 


def main(): 
    pyagentx.setup_logging() 
    try: 
     a = MyAgent() 
     a.start() 
    except Exception as e: 
     print "Unhandled exception:", e 
     a.stop() 
    except KeyboardInterrupt: 
     a.stop() 

if __name__=="__main__": 
    main() 

からnetSnmpIETFWGTableにリンクされていることでしょう、どのようにコードがnetSnmpIETFWGTableを更新するために知っているのですか?あなたはそれがこのサンプルコードで設定されたから、私は値を読み取ることができます見ることができるように :MIB

snmptable -v 2c -c public -Ci localhost NET-SNMP-EXAMPLES-MIB::netSnmpIETFWGTable 
SNMP table: NET-SNMP-EXAMPLES-MIB::netSnmpIETFWGTable 

    index nsIETFWGChair1 nsIETFWGChair2 
"group1"  "member 1"  "member 2" 
"group2"  "member 1"  "member 2" 
"group3"  "member 1"  "member 2" 
+0

私が残した答えに関するフィードバックは一度もありませんでした。あなたの問題を解決しましたか?もしそうであれば、それを受け入れられたものとしてマークすることは認められるでしょう。ありがとう。 – miken32

+0

@ miken32私はこれを書いた後に事故にあったが、今日まで何ヶ月もコンピュータを使用していない - 骨が壊れているので、今すぐあなたの答えをチェックしよう! – Paul

答えて

1

オブジェクト名は、DNSエントリのようなもので、彼らは、バックグラウンドでan ugly numberを指しています。

NET-SNMP-EXAMPLES-MIBを見ると、netSnmpIETFWGTablenetSnmpExamples 2と定義されています。いくつかの行をスクロールすると、netSnmpExamplesnetSnmp 2と定義されています。これはIMPORTSセクションではNET-SNMP-MIBから来ていると宣言されていますので、netSnmpなどが表示されている必要があります。SNMPv2-SMI MIBはSNMPのチェーンの先頭です。

最後に、netSnmpIETFWGTable1.3.6.1.4.1.8072.2.2.1に変換されます。ファイルの下部に初期化コードを見下ろして、あなたがこのOIDの親がクラスにリンクされて見ることができます:

self.register('1.3.6.1.4.1.8072.2.2', NetSnmpTestMibTable) 

うまくいけば、あなたの質問に答える必要があり、「どのようにコードがnetSnmpIETFWGTableを更新するために知っています"


また、MIBファイルを覗きよりも簡単ですsnmptranslateユーティリティを試してみることができます!

$ snmptranslate -On NET-SNMP-EXAMPLES-MIB::netSnmpIETFWGTable 
.1.3.6.1.4.1.8072.2.2.1 
$ snmptranslate -Of NET-SNMP-EXAMPLES-MIB::netSnmpIETFWGTable 
.iso.org.dod.internet.private.enterprises.netSnmp.netSnmpExamples.netSnmpExampleTables.netSnmpIETFWGTable 
$ snmptranslate 1.3.6.1.4.1.8072.2.2.1 
NET-SNMP-EXAMPLES-MIB::netSnmpIETFWGTable 
$ snmptranslate -Of 1.3.6.1.4.1.8072.2.2.1 
.iso.org.dod.internet.private.enterprises.netSnmp.netSnmpExamples.netSnmpExampleTables.netSnmpIETFWGTable 
+0

NET-SNMP-MIBのインポートに行きます。http://www.net-snmp.org/docs/mibs/NET-SNMP-MIB.txtこれは私が手に入れない部分です。どこに表示されますか? 1.3.6.1.4.1.8072.2.2.1として翻訳されていますか?さらなるステップはありますか?助けてくれてありがとう!その変換ツールは便利です – Paul

+1

MIBが 'IMPORTS netSnmp FROM NET-SNMP-MIB'と言うと、別のMIBから引き出していることを意味します。だからあなたは 'netSnmp'が' SNMPv2-SMI'からインポートされた 'enterprises 8072'として定義されているそのMIBの内部を見ることができます... – miken32

関連する問題