ググッてみると,一番多いのは無線 LAN が切断される現象らしいが,うちの場合は PC ⇔ WM3500R の通信は生きているので,どうも WM3500R ⇔ 基地局 の通信が切れているらしい.
じゃあ WiMAX の電波状態が悪いのかというとそうでもなくて,アンテナは常に 2本立ちだし,不思議なのが WM3500R を再起動させれば通信が回復する.いちいち WM3500R を再起動させるのはストレスが溜まるんだけど,こんなのをユーザーサポートに問い合わせてもどうせ電波状態で片付けられるんだろうなぁ.
というわけで,一定時間通信できなかったら WM3500R の再起動ページを kick する perl スクリプト書いてみた.
#!/usr/bin/perl -w
use strict 'vars';
use strict 'refs';
use LWP::UserAgent;
use HTTP::Request::Common qw(POST);
my $TimeoutCnt;
while( 1 ){
$_ = `ping -n 1 www.yahoo.co.jp -w 1000`;
if( !/Reply from/ ){
++$TimeoutCnt;
}else{
$TimeoutCnt = 0;
}
print( "Timeout = $TimeoutCnt\n" );
if( $TimeoutCnt >= 15 ){
RebootWM3500R();
print( "restarting WR3500...\n" );
sleep( 10 );
while( 1 ){
$_ = `ping -n 1 192.168.0.1 -w 1000`; # WM3500R が再起動するまで待つ
last if( /Reply from/ );
}
print( "done\n" );
$TimeoutCnt = 0;
}
sleep( 1 );
}
sub RebootWM3500R {
# リクエストの生成
my $url = 'http://web.setup/index.cgi/reboot_main_set';
my %formdata = (
'UPDATE_BUTTON' => '%BA%C6%B5%AF%C6%B0',
'DUMMY' => '',
'DISABLED_CHECKBOX' => '',
'CHECK_ACTION_MODE' => '1',
);
my $request = POST( $url, [%formdata] );
# UserAgentを生成して処理
my $ua = LWP::UserAgent->new;
my $res = $ua->request( $request );
#print $res->as_string;
}
# WR3500 の admin 認証
package LWP::UserAgent;
sub get_basic_credentials {
return ( 'admin', 'hogehoge' );
}
←でこれを走らせている時のネットワークのモニタ結果.
縦の目盛りが 5分だから,大体 5分毎に再起動を繰り返してるのがわかると思う.
なんぢゃこりゃwwww
余談だけど,このスクリプトを書くときに,再起動ページの POST メソッドの送信データを調べる必要があって,最初はパケットモニタソフトでも入れようかと思ってたんだけど,すげー簡単な方法があった.
計算機と戯れる日々
この方法はなかなか目からウロコだ.
0 件のコメント:
コメントを投稿