user-key's top pageへ site top pageへ

router memo (忘れないためのメモとも言う(^^;)

e-access ADSL modem&router (MegaBit Gear TE4121C) お問い合わせ先:(C)

MRTG によるlink speed表示

e-accessから貸し出されている住友電工製のADSL modem兼router(MegaBit Gear TE4121C)はSNMP非対応みたいなので、ぱっと見はMRTGで監視できない樣でしたが、MRTGでプログラムを呼出しその応答で監視できることが解ったので忘れないうち(^^;)に書いとく。

なお、VineLinux 2.1.5の環境の環境で動かしてます。

まず、MRTGは設定リファレンスに書いてある応答をするプログラムを書けば良い。

って事で、rubyの練習がてらつくてみたline_speed.rbが


#!/usr/bin/ruby

require 'net/http'

te4121c_ip = "IP-ADDRESS"
te4121c_user = "MOEM USER NAME"
te4121c_pass = "PASSWORD"

Net::HTTP.start( te4121c_ip ){|http|
    response , = http.get('/cgi-bin/main.cgi?cc_webname=STATUS',
          'Authorization' => 'Basic ' +   ["#{te4121c_user}:#{te4121c_pass}"].pack('m').strip)
    response.body.scan(/^\(.*? (\d+)Kbps.*? (\d+)Kbps\)$/)
    printf("%d\n%d\n0\n%s\n", 1000*$2.to_i,1000*$1.to_i,te4121c_ip)
}

とte4121c…の所の設定をすればmodemの今のlink speedを吐いてくれます

そしてMRTGはTargetに動かすプログラムをバックティック「`」で囲むとそのプログラムの応答を取って来てくれるそうなので。

mrtg.cfgに


Target[link_1]: `/home/user-key/mrtg/line_speed.rb`
Options[link_1]: gauge,growright
SetEnv[link_1]: MRTG_INT_IP="192.168.1.1" MRTG_INT_DESCR="link speed"
MaxBytes1[link_1]: 8160000
MaxBytes2[link_1]: 1020000
Title[link_1]: Traffic Analysis for 1 -- link speed
PageTop[link_1]: <H1>Traffic Analysis for 1 -- link speed</H1>
 <TABLE>
   <TR><TD>System:</TD>     <TD>adsl e-access 8M</TD></TR>
   <TR><TD>Maintainer:</TD> <TD>root <webmaster@quester.jp></TD></TR>
   <TR><TD>Description:</TD><TD>type 1 (telphone)  </TD></TR>
   <TR><TD>ifType:</TD>     <TD>adsl </TD></TR>
   <TR><TD>ifName:</TD>     <TD></TD></TR>
   <TR><TD>Max Speed in:</TD>  <TD>8.0 Mbits/s</TD></TR>
   <TR><TD>Max Speed out:</TD>  <TD>1.0 Mbits/s</TD></TR>
   <TR><TD>Ip:</TD>         <TD>192.168.1.1 (link speed)</TD></TR>
 </TABLE>

てな感じで追記しておけば/home/user-key/mrtg/line_speed.rbを呼び出してくれるので、link speedの表示が出来るようになりました。

MRTG によるtaafic表示

これも上記のMRTG によるlink speed表示の応用なので、


#!/usr/bin/ruby

require 'net/http'
te4121c_ip = "IP-ADDRESS"
te4121c_user = "MOEM USER NAME"
te4121c_pass = "PASSWORD"

Net::HTTP.start( te4121c_ip ){|http|
    response , = http.get('/cgi-bin/main.cgi?cc_webname=STATISTICS',
          'Authorization' => 'Basic ' +   ["#{te4121c_user}:#{te4121c_pass}"].pack('m').strip)
    response.body.scan(/^<\/H2>.*?ifInOctets<TD ALIGN="right" NOWRAP>(\d+)<\/TR>.*?ifOutOctets<TD ALIGN="right" NOWRAP>(\d+)<\/TR>/)
    printf("%s\n%s\n0\n%s\n", $1, $2, te4121c_ip)
}

ってrubyで書いて


Target[router_1]: `home/user-key/mrtg/traffic.rb`
SetEnv[router_1]: MRTG_INT_IP="192.168.1.1" MRTG_INT_DESCR="adsl"
MaxBytes[router_1]: 1000000
Title[router_1]: Traffic Analysis for 1 -- modem
PageTop[router_1]: <H1>Traffic Analysis for 1 -- modem</H1>
 <TABLE>
   <TR><TD>System:</TD>     <TD>adsl e-access 8M</TD></TR>
   <TR><TD>Maintainer:</TD> <TD>root <root@localhost></TD></TR>
   <TR><TD>Description:</TD><TD>type 1 (telphone)  </TD></TR>
   <TR><TD>ifType:</TD>     <TD>adsl </TD></TR>
   <TR><TD>ifName:</TD>     <TD></TD></TR>
   <TR><TD>Max Speed in:</TD>  <TD>8.0 Mbits/s</TD></TR>
   <TR><TD>Max Speed out:</TD>  <TD>1.0 Mbits/s</TD></TR>
   <TR><TD>Ip:</TD>         <TD>192.168.1.1 (router)</TD></TR>
 </TABLE>

ってmrtg.cfgに追記すれば、トラフィックの表示をしてくれます。

modem status表示

modemのステータスをそのままリダイレクトしても良かったんだけど、<a>や<img>タグがそのままだとリンク切れのタグになっていまいち美しくないので


#!/usr/bin/ruby

require 'net/http'
te4121c_ip = "IP-ADDRESS"
te4121c_user = "MOEM USER NAME"
te4121c_pass = "PASSWORD"

Net::HTTP.start( te4121c_ip ){|http|
    response , = http.get('/cgi-bin/main.cgi?cc_webname=STATUS',
	'Authorization' => 'Basic ' +   ["#{te4121c_user}:#{te4121c_pass}"].pack('m').strip)
    print "Content-type: text/html\n"
    printf("\n%s\n", response.body.gsub(/(<\/?A .*?>)|(<IMG.*>)|(<SCRIPT.*>[.\s^$]*<\/SCRIPT>)/,""))
}

とタグを潰してからステータスの表示をさせてます。