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 をつける必要がある。