ITエンジニアの技術メモ

神奈川在住のITエンジニアの備忘録です。主にプログラミング(Perl, Java など)やネットワーク技術について、仕事などを通じて学んだことを自分の中で整理するためにゆるゆると書いています。誰かのご参考になれば幸いです。

SNMPのパケットダンプを解析する時のコツ

先ほど、

SNMP v2c trap (coldStart) 送信スクリプト - Akira's Blog

の記事を書くために SNMPトラップのパケットダンプを解析した。この際に SEQUENCE型を示す 0x30 に着目すると、各データの区切り位置が分かって解析しやすかった。

 パケットダンプ内に 0x30 があったとして、それが SEQUENCE型を示すとは限らないが、目安として 0x30 をデータの区切り位置と見なすと、パケット解析が捗りそうな気がする。

ちなみに、解析したパケットダンプは以下。

30 40 02 01 01 04 06 70 75 62 6c 69 63 a7 33 02 
01 0a 02 01 00 02 01 00 30 28 30 0d 06 08 2b 06 
01 02 01 01 03 00 43 01 0a 30 17 06 0a 2b 06 01 
06 03 01 01 04 01 00 06 09 2b 06 01 06 03 01 01 
05 01

 ここに登場する 0x30 は全てSEQUENCE型を示すもので、以下の通り、データの区切りと見なせる。

30 : SEQUENCE     # トラップデータの開始
40 : Total length
02 01 01 : SNMP version
04 06 70 75 62 6c 69 63 : community name
a7 : V2-TRAP-PDU
33 : PDU length
02 01 0a : request id (10)
02 01 00 : error status
02 01 00 : error index

30 : SEQUENCE     # varbindリストの開始
28 : varbind list length

30 : SEQUENCE     # varbind(1つ目)の開始
0d : varbind length
06 08 2b 06 01 02 01 01 03 00 : .1.3.6.1.2.1.1.3.0
43 01 0a : sysUpTime value (10)

30 : SEQUENCE
17 : varbind length     # varbind(2つ目)の開始
06 0a 2b 06 01 06 03 01 01 04 01 00 : .1.3.6.1.6.3.1.1.4.1.0
06 09 2b 06 01 06 03 01 01 05 01 : .1.3.6.1.6.3.1.1.5.1

 

今後、SNMPデータのパケットダンプを解析する時は、0x30 を区切りの目安として考えたい。

まあ、wiresharkとか使える環境だったら、使った方が断然楽で速いのだが、そうでない環境で作業することもあると思うので、今回纏めてみた。