68user's page 掲示板

Prev< No. 265〜288> Next  [最新発言に戻る] [過去ログ一覧]
No. 265 # 68user 1999/04/14 (水) 01:38
> さらっと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 $>;
を外せば、一般ユーザ権限でもいけるかも(試してません)。

No. 266 # M.Masuda 1999/04/14 (水) 14:34
>リャマ本って、「プログラミング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)詳しくなければ無視してください。

ありがとうございました。

No. 267 # 68user 1999/04/14 (水) 23:38
> 一般ユーザ権限でもいけるかも(試してません)。
/sbin/ping もsuidされてるので、ICMPをしゃべるにはroot権限が
必要なんじゃないでしょうか。だから多分コメントアウトしても
ダメだと思います(未確認ですけど)。

> つまりラベル等で復帰先の指定をするという事です。
んー、gotoとかですか? Perlでは、ほとんどgoto文を使う必要は
ないと思うのですが。他の方法で代用できませんか?
# alarmのシグナルハンドラからの復帰先を指定したいとか?

No. 268 # M.Masuda 1999/04/15 (木) 15:31
>/sbin/ping もsuidされてるので
本当ですね。今まで気づかず使っていたみたいです...
#mount等がそうなのは分かりますが。ICMPをしゃべる事自体
#root権限が必要なのだろうか?無駄なトラフィックを避ける為?

> alarmのシグナルハンドラからの復帰先を指定したいとか?
はい、まったくそのとおりです。
#やっぱ表現力足りないみたい>自分
gotoは68Userさんと同じ理由で使うつもりは有りません。

ラクダ本でのalarmの解説が、私にとっては不十分なので上記の
方法があるのかさえ分かりません。
#シェルスクリプトでも同様の方法があるのでしょうか?

またこういう処理をする時に定石の様なものは有りますでしょうか。
あれば簡単でも教えてもらえれば助かります。

No. 269 # 68user 1999/04/16 (金) 03:05
> またこういう処理をする時に定石の様なものは有りますでしょうか。
定石かどうかはわかりませんが、
    sub alarm_handler {
        # ここに処理がきたということは、2秒以内にpingが終了しなかったということ
        # なので子プロセスを殺す。
        kill 1,$child_pid;
        $flg = 0;
    }
    $SIG{ALRM}=\&alarm_handler;
    $flg = 1;
    if ( $child_pid = fork ){ # 親
        alarm 2; # 2秒後にalarmセット
        wait;  # 子プロセスの終了を待つ
        alarm 0; # 2秒以内に終ったら、alarm解除
    } else {  # 子
        exec "ping -c 1 host";
    }
    if ( $flg == 1 ){ ping成功 }

とか。本来はもっと賢い方法があるのかもしれませんね。
子プロセスの始末まで考えなくていいなら、
    sub alarm_handler { $flg = 0; }
    $flg = 1;
    if ( fork ){
        alarm 2; sleep 4;
    } else {
        exec "ping -c 1 host";
    }
    if ( $flg == 1 ){ ping成功 }
でもいいかも。

No. 270 # M.Masuda 1999/04/16 (金) 15:31
サンプルまで書いてもらってありがとうございます。
自分で書いたスクリプトも、ほとんど同じような事をして、
さらに引数で秒数を指定できる様にしてあります。
#もっともこんなスマートには書いてないですが(^^;

>子プロセスの始末まで考えなくていいなら、
自分のスクリプトではこの部分の処理まではしていません。
試験時にスクリプト実行後(シェル、web経由)にpsで確認しても
プロセスが残る事はなかったので。
シェルやアパッチがこの辺の処理はやってくれると思っています。
#そう思いたいってのが本音。

スマートなスクリプトの為の勉強になりました。
いつもありがとうございます。

No. 271 # ono hirosi [E-mail] 1999/04/16 (金) 16:37
初めまして。
HTTPについてのページを読ませていただきました。
telnetでHTTPに接続できるとは思いもよりませんでした。
そこで、質問があるのですが、cookieを送信するときは、
どのようにすればよいのでしょうか?おしえてください。

No. 272 # 68user 1999/04/17 (土) 12:27
> cookieを送信するときは どのようにすればよいのでしょうか?
送信するだけなら、
    Cookie: hoge=fuga
などとします。
    % telnet www.cs.gunma-u.ac.jp 80
    GET /~j5306050/cgi-bin/printenv.cgi HTTP/1.0
    host: www.cs.gunma-u.ac.jp
    Cookie: hoge=fuga
てな感じ。そしたら printenv.cgi の中では
    $ENV{HTTP_COOKIE} eq 'hoge=fuga'
となります。

> 試験時にスクリプト実行後(シェル、web経由)にpsで確認しても
> プロセスが残る事はなかったので。
たしかに、親プロセスが死ぬ(終了も含む)と子プロセスには
SIGTERM(だったかな?)が送られますので、普通は特に後始末を
する必要はないです。

もちろん子プロセスがシグナルをブロックしていたら
その限りではありませんけど。

No. 273 # ono hirosi 1999/04/19 (月) 10:06
どうもありがとうございました。
netscapeはちょっと重いので、簡易ブラウザーを作ってみようかと
考えています。

No. 274 # 3年@群大情報 1999/04/21 (水) 13:55
端末のネットスケープで日本語入力をしたいのですが
いつもemacsで書いてカットアンドペーストをしています。
ダイレクトに入力することはできないのですか?

No. 275 # 68user 1999/04/21 (水) 17:17
kinput2を立ち上げて、NN/NC上のテキスト入力エリアで、
Shift+Spaceで変換モードONだったような気がします。

kinput2 は .xsessionの中で起動すると楽です。

No. 276 # R-N [URL] 1999/04/24 (土) 03:05
ども、こんばんわ。
今、初めて1から CGI を書いているのですが、
そこでちょっと質問が...。

JPERL でチェックした所、問題なく動いた(様に思う)のですが、
アップロードしてパーミッションを変更しても、お約束の
「Internal Server Error」がでます。

68user さんはエラーチェックなどはどうやってますか?

No. 277 # 68user 1999/04/24 (土) 07:03
> 68user さんはエラーチェックなどはどうやってますか?
    1. サーバのログ(/var/log/httpd-error.logなど)を見る。
    2. コマンドラインで実行。
    3. 思い当ったところをいろいろ変えてみる。
            3-1. 環境変数(PATHなど)
            3-2. スクリプトの文字コード(EUC or SJIS)
            3-3. 実行権限(nobody権限で動くかどうか)
    4. http://X68000.startshop.co.jp/~68user/cgi-bin/wwwboard.cgi?log=1999-03-26
                68user 1999/03/29(月) 16:11
                一般的には、以下のの方法でデバッグすると、大抵の場合解決すると思います。
         で説明したスクリプトをかまして実行。
    5. 怪しいところから順にコメントアウト。もし動いたら、直前にコメントアウトした
         部分がおかしい。

てな感じでしょうか。実際にやったことがあるのは1〜3くらいです。


あとさ gunma-u の方、質問して回答をもらったら、それに対する
返事くらい書いてね。「わかりました」「やってみたけどうまく
いきませんでした」くらいでいいから。それが最低限の礼儀だと
思います。それが嫌なら trouble@cs.gunma-u.ac.jp に質問して下さい。
# 別に gunma-u に限ったことではないけどね。

No. 278 # 68user 1999/04/24 (土) 07:12
当然のことですが、念のため補足を。
> それが嫌なら trouble@cs.gunma-u.ac.jp に質問して下さい。
trouble宛なら返事出さなくていい、ってわけじゃないです。

No. 279 # R-N 1999/04/26 (月) 02:02
はい、わかりました。
「ありがとうございます、うまくいきました」と書けば良かったですね。
本を見ながら初めて頭から書いたので多分色々不都合やら効率が悪い所やら
あるんでしょうが、これから一個一個潰していきます。
でわ、また御礼か泣きつきに来ます。(^_^;
毎度毎度、ありがとうございます。

No. 280 # 氷聖 1999/04/26 (月) 15:32
はじめまして,こんにちは.
つい1週間ほど前にFreeBSDに手を出した者です.
さっぱり解らないので色々と探してここにたどり着きました.
”UNIXのお部屋”は大変参考になりますね.すごく重宝します.
また何か解らないことがあったらこちらに伺おうと思っているので
その時は何卒よろしくお願いします.

No. 281 # 68user 1999/04/26 (月) 23:03
どもども。今後ともよろしくです。

表現がわかりにくい/構成が悪い部分があったら教えて下さいね。
どうも肥大化しすぎて、どこをどうすれば利用しやすくなるのか
わからなくなってしまいましたので。

No. 282 # R-N 1999/04/30 (金) 00:35
たぶん完成しました。(^_^;
http://www.raidway.ne.jp/~nouveau/dc/sh/
に置く、race.htmlとrrr.cgiです。(cgiはrrr.txtにしておいてあります)
どんなもんでしょう?
wrapperが非常に役に立ちました、ありがとうございます。

ところでハッシュというものは一時的にでも並べ替えは出来ないんですね。
代入した数値順での並べ替えでずっと詰まってました...。

No. 283 # 68user 1999/04/30 (金) 01:20
> http://www.raidway.ne.jp/~nouveau/dc/sh/
> に置く、race.htmlとrrr.cgiです。(cgiはrrr.txtにしておいてあります)

では拝見…と思ったら not found。
どこにあるんでせう?

> 代入した数値順での並べ替えでずっと詰まってました...。
毎回ソートする必要がありますね。解決されたようですが、
一応書いておくと、キーを数字順でソートしたいなら
    foreach ( sort {$a<=>$b} keys %hash ){ print "$_ $hash{$_}\n"; }
値を数字順でソートなら
    foreach ( sort {$hash{$a} <=> $hash{$b}} keys %hash ){ print "$_ $hash{$_}\n"; }
文字としてソートなら <=> ではなく cmp、などなど。

No. 284 # R-N 1999/04/30 (金) 01:59
すみません、置く前に書いたんで...。
設置にも手間取ってたりしました、何故かエラーが...。

ハッシュの件は解決しなかったので処理が終わったら
別の変数に代入しちゃいました。
この辺はかなり無駄がありそうですし、エラーがあるなら
この周辺でしょう...。
むぅ、foreach ( sort〜ですか...、組み込めるかな...。(-_-;
お手数おかけしました。

No. 285 # 68user 1999/04/30 (金) 02:03
あ、見れた。で、気づいた事。

    - $monが0月〜11月になっちゃいませんか。

うーん、これくらいかなぁ。後はどーでもいいというか、些細な事というか、
好みの問題というか。

    - EOF は End Of File の略なので、EOTが適当…なんでしたっけ?
        (EOT=End Of Textのつもり)。
    - if ($... <10) { $... = "0..." } の羅列より、
            $now = sprintf("%4d/%02d/%02d ...",$year+1900,$mon+1,$mday,...)
        の方がすっきりするかも。

全体的に特に問題はないんじゃないでしょうか。

No. 286 # 68user 1999/04/30 (金) 02:16
後は
> ($dtm,$soft,$point,$reho) = split(/\,/, $data[0]);
($dtm,$soft,$point,$reho) = split(/,/, $data[0]);
> $temp = $now."\,".$FORM{'soft'}."\,".$FORM{'point'}."\,".$ureho."\n";
$temp = "$now,$FORM{'soft'},$FORM{'point'},$ureho\n";

くらいかなぁ。ほんとに細かいことですけど。

それからこれは根本的な問題ですが、FORMから渡される値をチェックして
ないので、変なのを入れられる可能性がありますね。旧SEGA BBSのように。

渡された値が適切かどうかを調べるのは(僕は)必須だと思います。

No. 287 # R-N 1999/04/30 (金) 03:46
あ、3月だ...、全然気付きませんでした。(-_-;
変な書き方してますね私、指摘されると自分でも思う...。
sprintfは便利ですね。でもなんで%02dの時だけ『0』が...。
私の持ってる本も%02dだけ0が付いてる...。

> FORMから渡される値をチェック...
とりあえず$ENV{'HTTP_REFERER'}のチェックを入れてみます。
って、コレだと投票できないブラウザがあったか...。<SSとか

全部の値をチェックするんだったら投票フォーム部分も組み込んだ方が
楽そうだし、そうしようかな...。<いづれ(^_^;

勉強になりました!

>変なのを入れられる可能性がありますね。旧SEGA BBSのように。
ギクッ!

No. 288 # 1111 1999/04/30 (金) 16:07
111111

Prev< No. 265〜288> Next  [最新発言に戻る] [過去ログ一覧]