IT情報@PRO人

SNMPについて 第2回

この記事は2015年3月31日に書かれたものです。内容が古い可能性がありますのでご注意ください。


SNMPについて

今回もSNMPについて記載していきたいと思います。

MIBについて

MIBの調べ方

googleで rfc1213 などとググると RFC1213 のページが表示される。
http://www.ietf.org/rfc/rfc1213.txt

この中には以下のような記述があるが ( [page-13] )

system		OBJECT IDENTIFIER ::= { mib-2 1 }

この { } の中の文字が snmpwalk コマンドなどで取る際に必要になってくる。
例えば上記だったら以下のように snmpwalk を実行すれば値が取れる。

snmpwalk -v 2c -c public 192.168.100.126 mib-2.1

さらにこの中にある情報をピンポイントで取りたかったら
— the System group ( [page-13] ) から下にある情報を見ればよい。
例えばホスト名は以下のところに記載がある

sysName OBJECT-TYPE
              SYNTAX  DisplayString (SIZE (0..255))



SNMP Working Group                                             [Page 14]

RFC 1213                         MIB-II                       March 1991


              ACCESS  read-write
              STATUS  mandatory
              DESCRIPTION
                      "An administratively-assigned name for this
                      managed node.  By convention, this is the node's
                      fully-qualified domain name."
              ::= { system 5 }

なので DESCRIPTION に domain name とあるのでホスト名が取れることがわかる。
取り方は以下のようにして { } 中の情報にアクセスすればよいことがわかる。

snmpwalk -v 2c -c public 192.168.100.126 system.5
または
snmpwalk -v 2c -c public 192.168.100.126 mib-2.system.5

SYNTAX はオブジェクトのタイプを表している。
このオブジェクトのタイプは要するに格納する値の型(INTEGER, IpAddressなど)を表しているのだが、
これを見るとどういった値が格納されているかが大体わかる。
型の中には SEQUENCE といったものもあり、これは構造体になっていることを表している
構造体はその中にさらに複数のオブジェクトを格納していること示す。
例えば以下のように ipAddrTable オブジェクトは SYNTAX が SEQUENCE OF IpAddrEntry になっているが、
これは ipAddrTable の中に IpAddrEntry というオブジェクトが含まれていることを表している

そして IpAddEntry の中身を見るとさらにこれは SEQUENCE { になっているので、
構造体になっていることがわかる。

RFC 1213                         MIB-II                       March 1991


          -- the IP address table

          -- The IP address table contains this entity's IP addressing
          -- information.

          ipAddrTable OBJECT-TYPE
              SYNTAX  SEQUENCE OF IpAddrEntry
              ACCESS  not-accessible
              STATUS  mandatory
              DESCRIPTION
                      "The table of addressing information relevant to
                      this entity's IP addresses."
              ::= { ip 20 }

          ipAddrEntry OBJECT-TYPE
              SYNTAX  IpAddrEntry
              ACCESS  not-accessible
              STATUS  mandatory
              DESCRIPTION
                      "The addressing information for one of this
                      entity's IP addresses."
              INDEX   { ipAdEntAddr }
              ::= { ipAddrTable 1 }

          IpAddrEntry ::=
              SEQUENCE {
                  ipAdEntAddr
                      IpAddress,
                  ipAdEntIfIndex
                      INTEGER,
                  ipAdEntNetMask
                      IpAddress,
                  ipAdEntBcastAddr
                      INTEGER,
                  ipAdEntReasmMaxSize
                      INTEGER (0..65535)
              }

          ipAdEntAddr OBJECT-TYPE
              SYNTAX  IpAddress
              ACCESS  read-only
              STATUS  mandatory
              DESCRIPTION
                      "The IP address to which this entry's addressing
                      information pertains."
              ::= { ipAddrEntry 1 }





SNMP Working Group                                             [Page 31]
==============================================================================================

例えばそのマシン上で使用されているIPアドレスを調べる場合、以下のような構造体になっているので
IpAddrEntry ::=
SEQUENCE {
ipAdEntAddr
IpAddress,
以下のようにするとIPアドレスが取れる。

[root@localhost ~]# snmpwalk -v 1 -c public 192.168.100.126 ipAdEntAddr
IP-MIB::ipAdEntAddr.127.0.0.1 = IpAddress: 127.0.0.1
IP-MIB::ipAdEntAddr.192.168.100.126 = IpAddress: 192.168.100.126

またさらに IpAddrEntry の中の各要素はアクセスする際の名前がその下にあるので、以下のようにしても同じ意味になる。

[root@localhost ~]# snmpwalk -v 1 -c public 192.168.100.126 ipAddrEntry.1
IP-MIB::ipAdEntAddr.127.0.0.1 = IpAddress: 127.0.0.1
IP-MIB::ipAdEntAddr.192.168.100.126 = IpAddress: 192.168.100.126

また ACCESS という行はそのオブジェクトが読み取り専用なのか、書き込み可能なのかなどアクセス権を表している
ACCESS で not-accessible になっているものは 読み取りも不可能なもので内部(ローカル)で使用するものである。
ただ not-accessible でも別のオブジェクトに同じ内容が入っていたりするのでそれを見れば同じように値が取れる。

STATUS という行はそのオブジェクトが一般的に必ず必要になるものなのか、
それともOSや機器によって無くてもよいものなのかといったことを表している。
mandatory は必須要素である。
optional は任意の要素である。
obsolete は廃止されている要素である。

DESCRIPTION は説明である。

MIB情報の意味

先頭の .(ドット)は root を表す

例えば以下のようにするとホスト名を得ることができる。
# snmpwalk -v 1 -c public 192.168.100.126 .1.3.6.1.2.1.1.5.0
もしくは以下のようにする(下記の sysName の N は大文字でなければいけない。大文字・小文字は区別される)
# snmpwalk -v 1 -c public 192.168.100.126 system.sysName.0
もしくは以下のようにする( sysName の N は大文字でなければいけない。大文字・小文字は区別される)
# snmpwalk -v 1 -c public 192.168.100.126 sysName.0
もしくは以下のようにする( sysName の N は大文字でなければいけない。大文字・小文字は区別される)
# snmpwalk -v 1 -c public 192.168.100.126 sysName

上記の sysName.0 のように 一番後ろの 0 は各オブジェクトのインスタンスを表すので、
値を確認する場合はつけなくてもよいが、
snmpset コマンドなどで値を変更する場合はインスタンスに対して変更を行う必要があるので必ず 0 をつける必要がある。

  • このエントリーをはてなブックマークに追加

PAGE TOP