|
すいませんまたまた教えて欲しいのです。 下のスクリプトでおかしい所は無いでしょうか。 #!/usr/bin/perl -w use Net::Ping; print "Content-type: text/plain\n\n"; $hostname = 'pingコマンドの返らないホスト'; print "Checking $hostname\n"; if (pingecho($hostname,$timeout)){print "Echo on\n"} else{print "Echo off\n"} $hostname = 'pingの返るホスト'; print "Checking $hostname\n"; if (pingecho($hostname,$timeout)){print "Echo on\n"} else{print "Echo off\n"} exit; リャマ本のP531でのNet::Pingを試しているのですが、 上記の試験結果は両方ともEcho offです。 もちろんホストの指定の間違いもありません。 初めて use コマンドを使うので、何か他に間違いがあるのかと use行をコメントアウトしたり、他のコマンドを使ってみましたが (use Cwdの結果は正常に表示)原因が不明です。 最初このコマンドを知らずに、自分で`ping -c1`とararmを使って コーディングしましたが、シグナルを受け取った後の制御がうまく できずにリャマ本を調べていたら、「なんだこんな便利なものがあ るじゃないの!」と思い使ってみましたがこれもまたうまく行かず 原因が分かりません。 Net/Ping.pmも存在しますが、その記述内容は私には高度すぎて 全然分からずお手上げ状態です。 どうかご教授よろしくお願いします。 |
|
下には書き忘れましたが、$timeout=2;も指定してあります。 |
|
リャマ本って、「プログラミングPerl改訂版」ですよね? ラクダ本じゃなくてリャマ本が正式名(というか通称)なんですか? それとも「ラクダ本=旧版」「リャマ本=新版」? 何も試さずに書きますが、リャマ本にも書いてある通り、pingechoは 「TCPのechoプロトコル」を使って ホストが生きているかどうか調べます。 が、少くともFreeBSDのデフォルトでは echoポートは閉じられていますので、 一般的に「echoが通る=生きている」とは言えないでしょう。 echoプロトコルってのは http://X68000.startshop.co.jp/~68user/net/echo-1.html です。だから、telnet hostname echoでお話しできたら、pingechoでも 正しい答えが返ってくるはずです。 |
|
追加。これまた何も試さずに書きますが、さらっとNet.Pmを見た限りでは 適切な引数を渡せば ICMPのecho も使えるようです。これを使えば /sbin/ping と同じ挙動をさせられると思います。 |
|
> さらっとNet.Pmを見た限りでは Net/Ping.Pm の間違いですね。で、ちーと試してみました。結論から言うと、 use Net::Ping; $p = Net::Ping->new("icmp",$timeout); $p->ping($hostname); ですかね。でも、root権限が必要です。Ping.Pm の croak("icmp ping requires root privilege") if $>; を外せば、一般ユーザ権限でもいけるかも(試してません)。 |
|
>リャマ本って、「プログラミングPerl改訂版」ですよね? すいません誤解を招くような書き方をして(^^; そうです「プログラミングPerl改訂版」を指しています。 他でそのような表現があったので、安易に使ってしまいましたが >ラクダ本じゃなくてリャマ本が正式名(というか通称)なんですか? 私も正式には不明です。 #ラウンジで聞いてみようかな... > croak("icmp ping requires root privilege") if $>; > を外せば、一般ユーザ権限でもいけるかも(試してません)。 そうですか、確かに icmp ping requires root privilege と言われました。 suidや、Ping.pmを編集する事まではしたくないのです。 やはり「なんだこんな便利なものがあるじゃないの!」の認識は ちょっと甘かった様ですね。 一発での`ping -c1 $hostname`とararmの方法はわかりますので、CGI単体 で行おうとせず他の方法を組み合わせて試してみます。 ちなみにあのスクリプトの目的は、普通のサーバーではなくダイアルアップ サーバー?(プロバイダーでユーザーの電話回線経由の接続を受け取るヤツです) が生きてるかどうか、つまり一般的にいうPPPxxx.domain.ne.jpとかが 接続状態かどうかを調べるツールを作ろうとして、そのための動作確認 用の試験スクリプトでした。 >http://X68000.startshop.co.jp/~68user/net/echo-1.html これからの課題なので勉強します。 それから、ちょっと違うとは思いますがBASICの場合でいう割り込み処理から 復帰する際のリジュームコマンドの様な事はできないのでしょうか。 つまりラベル等で復帰先の指定をするという事です。 最初がBASICだったものでこういう表現しかできませんが、68Userさんがその 辺(BASIC)詳しくなければ無視してください。 ありがとうございました。 |