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の領域しかない。
続いて2byte分の数値のINTEGERデータ。valueは2byteの領域。
次は3byte分の数値のINTEGERデータ。valueは3byte分の領域。
4byte分の数値のINTEGERデータは取得してないけど、きっと4byteなんだろう。
ということで、SNMPのINTEGER型は、その数値を表現するのに必要なバイト数サイズ分のデータで設定されてくるんであろうことが分かった。
数値の並びからリトルエンディアンなんだろうけど、バイト数がバラバラなのでntohsとかntohlとかの関数で単純に変換するわけにもいかない。
DNSプロトコル見た時も思ったけど、昔のプロトコルって、処理の面倒くささよりも通信データのサイズ減らすことに力入れてるよなぁ。。