[PR]看護師の好条件な求人情報満載:今人気の転職サイト♪6分に1人が登録中
Rubyで超お手軽SNMP!
What's new
Simple SNMP library Ver. 0.1-20010502 これが最新です.
s2nmp って?
s2nmp はシンプルな SNMP(Simple Network Management Protocol)ライブラリで、ルータ等のネットワークデバイスから情報を得たり、あるいはデバイスの設定を行ったりするために利用します。
このライブラリの特徴は、はすべてRuby で記述されていることです。
ですから、 UCD-SNMP 等の他のライブラリを必要としません。socket などの ruby の標準的なライブラリだけで動かすことができます。
そのため、Windows95,98を含むいろいろなプラットフォームで利用することができます。
ダウンロード(Free)
s2nmp-01-20010502.tar.gz (2805 byte)
サンプルを見た方が早いです!
SNMP class Reference
require 'socket'
require 's2nmp'
- new( host_address [, port=161] )
- SNMP セッションオブジェクトを作成し、それを返します。
- get( comunity, vars )
- SNMP GetRequest PDU を変数リストと共にセッション作成時に指定されたホストに送出します。 SNMP GetResponse PDU を受信するまで処理はブロックされます。
受信されたPDUは、変数-値バインディングとして翻訳され、セッションオブジェクト内に保持します。保持されている変数-値の配列は、"vars" メソッドによりRubyのArrayオブジェクトとして取り出すことができます。
get メソッドは、機器からの応答を受信した場合はSNMPにより定義されるコードを返します。
タイムアウトの場合はnil を返します。
- comunity
- コミュニティを指定する String オブジェクトを指定します。
例:"public"
- vars
- 取得したい Oids(オブジェクト識別子) の配列を指定します。配列の要素である、各々のOidは、Stringオブジェクトとして指定し、'.' で10進数の数字をつないだものです。
例: ["1.3.6.1.2.1.1.1.0"]
- getnext
- SNMP GetNextRequest PDU を送出します。 変数リストはもっとも最近実行された get あるいは getnext メソッドに指定されたものが使用されます。この結果もget メソッドと同じように、翻訳、保持され、vars メソッドでRuby の Array オブジェクトの配列として取り出すことができます。詳細は vars メソッドを参照してください。
- walk( comunity, vars ){ | array-of-var-val-bind | }
- varsメソッドで指定されたターゲットMIBのサブツリーをスキャンします。
walkメソッドの中で、get メソッドと getnext メソッドが実行されます。
ターゲットから応答を得るたびに指定されたブロックが評価されます。
ブロックへは、「変数-値-バインディング」が与えられます。これは、
MIB変数のOID、変数のタイプ(タグ)、および値を要素とするRubyの配列です。
OID は ruby の String です。
- erridx
- ターゲットとなるネットワーク機器の SNMP エージェントによりエラーが検出され
た場合の位置を示します。
- vars
- 「変数-値-バインディング」の配列を返します。
「変数-値-バインディング」とは、MIB変数のOID、変数のタイプ(タグ)、
および値を要素とするRubyの配列です。
例) ["1.3.6.1.2.1.1.1.0", 4, "Cisco Internetwork Operating..."]
2番目の要素である '4' は、変数のタイプが 'Octetstring' であることを示し
ています。'vars'メソッドはこの配列を返すわけですからつまり2次元の配列を
返すことになります。
- set( comunity, array-of-var-val-bind )
- SNMP SetRequest PDU を送出します。
引数はコミュニティ文字列と「変数-値-バインディング」の配列です。
- SNMP.v1trap( src, dest, comunity, enterprise, gentype, spectype,a aray-of-var-val-bind )
- 指定された SNMP マネージャに SNMPv1Trap PDU を送出します。
- src
- trap メッセージを送出するSNMPエージェントの IPアドレス。
言い換えれば存在しないエージェントのアドレスも指定できます。
IPアドレスは文字列で指定してください。
- dest
- トラップレシーバあるいはSNMP管理ステーションのアドレス。
このパラメータはUDPSocket.connect に透過的に渡されます。
- comunity
- コミュニティを指定する文字列。例:"public"
- enterprise
- enterprise OID。 例:"1.3.6.1.4.1.9.1.172"
- gentype
- generic trap type を Integer で指定します。
- spectype
- specific trap type を Integer で指定します。
- aray-of-var-val-bind
- 「変数-値-バインディング」の配列。
「変数-値-バインディング」は変数、変数の型、値の要素をとる Ruby
の配列なのでそれの更に配列を指定します。
例) [["1.3.6.1.2.1.2.2.1.7.1", 2, 1]]
おまけ
s2nmp.rb にはASN.1の転送フォーマットをエンコードしたりデコードしたりする
モジュール Ber が入っています。
- tlv(data)
- バイト列 data をタグ、長さ、値に分割して返します。
- dec_varbind(msg)
- 変数-値バインドリストをデコードします。[変数, タグ, 値] の配列を返します。
- dec_int(data)
- バイト列を integer とみなしてデコードします。
- dec_cnt(data)
- バイト列を counter とみなしてデコードします。
- dec_oid(msg)
- バイト列を OID とみなしてデコードします。10進表記をドットで連結した文字列を返します。 '.'でsplit すればよいし、Ruby ならなんとか料理できるでしょう。
- enc_len(n)
- 整数 n を「長さ」にエンコードします。
- enc_int(n)
- 整数 n を「integer」にエンコードします。
- enc_str(s)
- ruby の String を「Octetstring」にエンコードします。
- enc_null
- エンコードされた「null」を返します。
- enc_oid(oid)
- 10進表記をドットで連結した文字列を「Oid」にエンコードします。
- enc_ipaddr(s)
- 10進表記をドットで連結した文字列を「ipaddress」にエンコードします。
- enc_cnt(n)
- 整数 n を「counter」にエンコードします。
- enc_gauge(n)
- 整数 n を「gauge」にエンコードします。
- enc_ticks(n)
- 整数 n を「tick」にエンコードします。
Links
Sadayuki Sakamoto(flea@h8.dion.ne.jp)