#!/usr/bin/perl
#---------------------------------------------------------------------
# mn8300_napt.cgi V1.0L01 (2003/12/24)
#---------------------------------------------------------------------
# このスクリプトは、NTT-ME BMN8300WからNATセッション数を取得し返送
# するスクリプトです。
# なお、このスクリプトはLinux専用で、libwww-perlが必要です。
#---------------------------------------------------------------------
## [使用方法]
#
# おやじのHPを参考にしてください。
#
#---------------------------------------------------------------------
## [global symbol] (触手厳禁)
my($router_url, $router_login, $router_user, $router_pass, $napt_s,
$debug, $debug_msg, $debug_log, $ping, $pingtry, $itry, @content,
$content, $ua, $req, $res, $ret, @access_param);
#---------------------------------------------------------------------
## [設定]
#
# 下記変数を環境に合わせて設定してください。
#---------------------------------------------------------------------
# ルータからのNAPTセッション数取得関係の環境設定
$router_url = "192.168.1.1"; # MN8300のLAN側アドレス
$router_user = 'username'; # MN8300のログインユーザ名
$router_pass = 'password'; # MN8300のログインパスワード
#
# スクリプトのディレクトリ
$dir = '/usr/local/bin/mn8300'; # スクリプトのディレクトリ
# デバッグモード(ルータからの受信メセージログを作成)
$debug = 0;
# debug 0:off 1:on
#--以下変更不可-------------------------------------------------------
$debug_log = "$dir/log/debug.log"; # デバッグ用ログファイル名
$ping = "/bin/ping -nq -c 1"; # Linux用pingコマンド
$pingtry = 3;
# ルータ監視用pingリトライ回数
#---------------------------------------------------------------------
use LWP::UserAgent;
use strict;
$router_login = "http://$router_url/cgi-bin/main.cgi?mbg_webname=nattbl";
#---------------------------------------------------------------------
##### ルータからNAPTセッション数取得 #####
# ルータにpingを打って応答確認
$itry = 0;
while( $itry++ < $pingtry ) {
`$ping $router_url`;
last if ( ! $? );
# 応答有り
}
# ルータにログインしてNAPTセッション数取得
$napt_s = 0;
$content = 0;
if ( $itry < $pingtry ) {
# ping応答有り。NAPTセッション数取得処理
$ua = LWP::UserAgent->new;
$req = HTTP::Request->new(GET => $router_login);
$req->authorization_basic($router_user, $router_pass);
$req->content_type('application/x-www-form-urlencoded');
$res = $ua->request($req);
&debug; # ルータからのメッセージログ
if($res->is_success){
# ルータからの応答有り
$content = $res->content; # 応答メッセージ取得
@content = split(/<\/p>/, $content); # 1行づつ分離
foreach (@content) {
$_ =~ s/\n|\s//g;
last if (( $napt_s ) = m|現在の登録件数:.*?(\d+)|);
}
if ( $napt_s == 0 ) { $ret = 1 ; }
}else{
$ret = 2;
# 応答メッセージ取得不可
}
}else{
$ret = 3;
# pingタイムアウト
}
print $napt_s."\n";
print $napt_s."\n";
# Print uptime
print $napt_s." ".$napt_s."\n";
# Print machine name for mrtg
print $router_url."\n";
exit $ret;
### デバッグログ取得 ###
sub debug {
$debug_msg = $res->as_string;
if($debug){
if (open (DEBUG, ">> $debug_log")){
flock (DEBUG, 2);
print DEBUG "$debug_msg\n";
close(DEBUG);
}
}
}