ifTableは、それぞれのインタフェースの詳細を保持したテーブルであり、ifNumberの数だけ要素がある(図6)。interfacesサブツリーに備わる各オブジェクトの意味は、次の表3、表4の通りだ。
表3■interfacesサブツリー
| 名称 | OID | 型 | 意味 |
|---|---|---|---|
| ifNumber | interfaces.1 | Integer32 | インタフェース数 |
| ifTable | interfaces.2 | SEQUENCE OF IfEntry | IfEntryのテーブル(表4)。ifNumberの数だけ要素が存在する。 |
表4a■ifTableの配下の構造(IfEntry)インデックス
| 名称 | OID | 型 | 意味 |
|---|---|---|---|
| ifIndex | interfaces.2.1.1 | InterfaceIndex | 「1」「2」…という連番。インスタンスにアクセスする際のインデックス。 |
表4b■ifTableの配下の構造(IfEntry)オブジェクト
| 名称 | OID | 型 | 意味 |
|---|---|---|---|
| ifDescr | interfaces.2.1.2 | DisplayString | インタフェース名などの概要 |
| ifType | interfaces.2.1.3 | IANAifType | インタフェースの種類 |
| ifMtu | interfaces.2.1.4 | Integer32 | MTUの値 |
| ifSpeed | interfaces.2.1.5 | Gauge32 | 通信速度。単位はbps |
| ifPhysAddress | interfaces.2.1.6 | PhysAddress | 物理アドレス(MACアドレスなど) |
| ifAdminStatus | interfaces.2.1.7 | INTEGER | 管理者向けのインタフェースの状態。1(有効)、2(無効)、3(テスト中)のいずれか。 |
| ifOperStatus | interfaces.2.1.8 | INTEGER | 操作ステータス。上記の1、2、3、のほか、4(不明)、5(活性化されていない)、6(コンポーネントが提供されていない)、7(下位層がダウンしている)。 |
| ifLastChange | interfaces.2.1.9 | TimeTicks | ifOperStatusが最後に変化したときのsysUpTimeの値。 |
| ifInOctets | interfaces.2.1.10 | Counter32 | 受信した総バイト数 |
| ifInUcastPkts | interfaces.2.1.11 | Counter32 | 受信したユニキャストパケット数 |
| ifInNUcastPkts | interfaces.2.1.12 | Counter32 | 受信した非ユニキャストパケット数。推奨されない。代わりにifMulticastPktsまたはifInBroadcastPktsを使う(これらはifXTable(mib-2.31以下)にある)。 |
| ifInDiscards | interfaces.2.1.13 | Counter32 | 破棄された受信パケット数 |
| ifInErrors | interfaces.2.1.14 | Counter32 | 受信エラーのパケット数 |
| ifInUnknownProtos | interfaces.2.1.15 | Counter32 | プロトコル不明の受信パケット数 |
| ifOutOctets | interfaces.2.1.16 | Counter32 | 送信した総バイト数 |
| ifOutUcastPkts | interfaces.2.1.17 | Counter32 | 送信したユニキャストパケット数 |
| ifOutNUcastPkts | interfaces.2.1.18 | Counter32 | 送信した非ユニキャストパケット数。推奨されない。代わりにifOutMulticastPktsまたはifOutBroadcastPktsを使う(これらはifXTable(mib-2.31以下)にある)。 |
| ifOutDiscards | interfaces.2.1.19 | Counter32 | 破棄された送信パケット数 |
| ifOutErrors | interfaces.2.1.20 | Counter32 | 送信エラーのパケット数 |
| ifOutQLen | interfaces.2.1.21 | Gauge32 | 送信パケットキューの長さ |
| ifSpecific | interfaces.2.1.22 | OBJECT IDENTIFIER | インタフェースを利用するために使われるメディア特有のMIBへのリファレンス。ただし推奨されない。 |
より詳細なインタフェース情報は、interfacesサブツリーではなく、ifMIBサブツリー(mib-2.31)から取得することもできる(RFC2233を参照)。ここでは、あるインタフェースに対する「送信バイト数」「受信バイト数」を調べて、トラフィックを計測したいとしよう。
その場合、次の手順をとればよい。
[1]インタフェース名を探す
インタフェースの情報は、図6に示した通り、表4に示したテーブル形式で格納されている。そこでまずは、取得したいインタフェースのインデックス番号を調べる。
これには幾つかの方法があるが、一般的なのはインタフェース名を調べることだ。表4に示したように、インタフェース名は、ifDescrが保持している。そこで、次のようにsnmpwalkコマンドを実行して、インタフェース名一覧を得るのだ。
$ snmpwalk -c hogeprivate -v 1 localhost ifDescr
IF-MIB::ifDescr.1 = STRING: lo
IF-MIB::ifDescr.2 = STRING: sit0
IF-MIB::ifDescr.3 = STRING: eth0
上記の例では、「lo」「sit0」「eth0」の3つのインタフェースが搭載されており、インデックス番号は、先頭から順に「1」「2」「3」であることが分かる(もちろん表示される値は、環境によって異なる)。
[2]インタフェースの情報を取得する
ここでは[1]の結果、eth0に関して調べたいとしよう。つまり、この例ではインデックス番号が3番だ。表4に示したように、受信パケット数はifInOctetsであるから、snmpgetコマンドを使って、
$ snmpget -c hogeprivate -v 1 localhost ifInOctets.3
IF-MIB::ifInOctets.3 = Counter32: 9000663
と取得できる。また同様に、送信パケット数はifOutOctetsであることから、
$ snmpget -c hogeprivate -v 1 localhost ifOutOctets.3
IF-MIB::ifOutOctets.3 = Counter32: 879194
となる。
ここではinterfacesサブツリーから情報を取得したが、もしIPパケットを対象にしたいのであれば、ipサブツリーからたどるのもよいだろう(関連リンク、IP-MIBを参照)。
Copyright© 2012 ITmedia, Inc. All Rights Reserved.