#!/usr/bin/perl # # Pingを撃ってネットと繋がっているか確認し、記録を残すPerlスクリプト。 # YahooBB回線がリンク切れしてないか調査する為に作成。 # # by mieki256 # # # 使い方: # # perlが利用できる環境で、 # perl pingchk.pl # と入力。 # pinglog.txt というファイルに記録が残る。 # # そのままだとスクリプトは動き続けるので、 # 停止するときは pingbreak.txt というファイルを削除する。 # (Ctrl+cで中止すると、以後alarmで不具合が出る為) # # # 処理内容: # # 一定時間ごとに、どこぞのサーバにpingを打って記録を取る。 # 回線が切れてなければ正常応答が返ってくるし、 # 回線が切れていれば応答が返ってこない。 # 今回、pingを撃つ御相手のサーバはYahooBB関係のサーバにした。 # # (一定時間毎に相手のサーバに負荷をかけてしまうわけで #  大変申し訳ない話・本来やっちゃいけない話ではないのかと思いつつも、 #  こちらもこう頻繁にリンク切れしていては非常に困るのであるからして #  せめてこのくらいは調査の為の協力をお願いしたい所存。 #  ていうか本来こういうことはYahooBB側で調べることじゃないのか? #  どうしてユーザ側が調査・苦労しなければならないのか。) # # 2003/03/05 YahooBBを解約してフレッツADSLを申し込んだが、 # 一応フレッツADSLについてもリンク切れしていないかどうか確認しておく。 # → たまに切れてる模様。やはりADSLは不安定なのか。 # # 2004/04/17 # 公開用にコメントを増やした。 use Net::Ping; sub usage { # 使い方表示 print <> $jobbrkfile") || die "Can not open $jobbrkfile"; print OUT $msg; close(OUT); open(OUT,">> $logfile") || die "Can not open $logfile"; print OUT $msg; close(OUT); print $msg; while( -e $jobbrkfile ) { $cmm = $chktm; &ping_a; sleep($cmm); } } sub ping_a { $retry = $retry_def; $tmstr = &getlocaltm; $msg = 'X'; $p = Net::Ping->new("icmp",$tmout); do { if ( $p->ping($host,$tmout) ) { $tmstr = &getlocaltm; $msg = '.'; } sleep(1); $cmm--; } while ( --$retry > 0 && $msg ne '.' ); $p->close(); open(OUT,">> $logfile") || die "Can not open $logfile"; print OUT "$tmstr $msg\n"; close(OUT); } sub getlocaltm { ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localtime(time); return sprintf("%04d/%02d/%02d %02d:%02d:%02d",$year+1900,$mon+1,$mday,$hour,$min,$sec); }