#!/usr/bin/perl

#---------------------------------------------------------------------
# mn8300_napt.cgi V1.0L01 for Win32 (2004/10/11)
#---------------------------------------------------------------------
# このスクリプトは、NTT-ME BMN8300WからNATセッション数を取得し返送
# するスクリプトです。
# なお、このスクリプトはEUC_JP専用で、libwww-perlが必要です。
# libwww-perlはperl5.8.4ならデフォルトで入っていますが、無ければ、ppm
# でインストールしてください。
#---------------------------------------------------------------------

## [使用方法]
#
# おやじの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 = "ping -n 1";              # Windows用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);
      }
   }
}