mokky14's IT diary

IT関係の仕事メモ、勉強会の感想など書いてます。

SNMPのINTEGER型

SNMP-GETでINTEGER型のvariable-bindingsデータ取得してみたのでその結果を残しとく。

 

SNMPエージェントとしてsnmpdを使用。以下URLの情報に従って設定。

 http://hp.vector.co.jp/authors/VA022911/tec/centos/snmp.htm 

 

INTEGER型のvaliable-bindingsを探すため、snmpwalkを実行し、INTEGER型のデータを検索。

[mokky14@centos1 lib]$  snmpwalk -v 2c -c private -O n localhost | grep INTEGER
出力は長いので割愛。。

 

 

型がINTEGER型だったvaliable-bindingsのOIDを指定して、snmpgetコマンドを実行。

OIDにはINTEGERの値が1byte、2byte、3byteで表現できるvalueのOIDをそれぞれ指定。

 

[mokky14@centos1 lib]$  snmpget -v 2c -c private -O n  127.0.0.1 .1.3.6.1.2.1.25.2.3.1.5.10  .1.3.6.1.2.1.25.4.2.1.1.2176  1.3.6.1.2.1.88.1.4.2.1.4.6.95.115.110.109.112.100.95.109.116.101.84.114.105.103.103.101.114.70.97.105.108.117.114.101 1.3.6.1.2.1.88.1.4.2.1.4.6.95.115.110.109.112.100.95.109.116.101.84.114.105.103.103.101.114.70.97.108.108.105.110.104
.1.3.6.1.2.1.25.2.3.1.5.10 = INTEGER: 2064376
.1.3.6.1.2.1.25.4.2.1.1.2176 = INTEGER: 2176
.1.3.6.1.2.1.88.1.4.2.1.4.6.95.115.110.109.112.100.95.109.116.101.84.114.105.103.103.101.114.70.97.105.108.117.114.101 = INTEGER: true(1)
.1.3.6.1.2.1.88.1.4.2.1.4.6.95.115.110.109.112.100.95.109.116.101.84.114.105.103.103.101.114.70.97.108.108.105.110.104 = No Such Instance currently exists at this OID

 

以下、wiresharkでパケットキャプチャしてみたデータ。

1byte分の数値のINTEGERデータ。valueは1byteの領域しかない。

f:id:mokky14:20130319180708p:plain

 

続いて2byte分の数値のINTEGERデータ。valueは2byteの領域。

f:id:mokky14:20130319180715p:plain

 

次は3byte分の数値のINTEGERデータ。valueは3byte分の領域。

f:id:mokky14:20130319180718p:plain

 

4byte分の数値のINTEGERデータは取得してないけど、きっと4byteなんだろう。

 

ということで、SNMPのINTEGER型は、その数値を表現するのに必要なバイト数サイズ分のデータで設定されてくるんであろうことが分かった。

数値の並びからリトルエンディアンなんだろうけど、バイト数がバラバラなのでntohsとかntohlとかの関数で単純に変換するわけにもいかない。

DNSプロトコル見た時も思ったけど、昔のプロトコルって、処理の面倒くささよりも通信データのサイズ減らすことに力入れてるよなぁ。。