68user's page 掲示板

Prev< No. 1299〜1309> Next  [最新発言に戻る] [過去ログ一覧]
No. 1299 # ありさわ [E-mail] 2000/10/27 (金) 19:41:12
Perlのネットワークプログラムで、サーバーとの接続が
切れた状態を検出したいのですが、LANケーブルがつながった状態で
通信できなくなった状態は検出してPerlプログラムを終了出来るのですが
LANケーブルを引きぬくことによって、通信できなくなった状態はどのようにして検出したらよいのですか?

一応、Perlの中でPingをうって帰ってきた値を見て検出しようと
したのですが、Perlの中のPingはRoot権限でないとエラーに
なってしまいます。
Root権限以外でPingを実行する方法か、あるいは違う方法を
知っていたら教えて下さい。お願いします(v_v)

No. 1300 # 68user 2000/10/28 (土) 04:43:23
@宗佑さん
> "xxx@xxx.yyy.zzz"といった指定したメールアドレスを
> from句に入れて自動返信したいのです。
これは、単に From ヘッダが xxx@xxx.yyy.zzz になっていれば
いいのですか? それとも envelope from が xxx@xxx.yyy.zzz と
なっていて、例えば転送途中でメール送信に失敗した場合、
エラーメールが xxx@xxx.yyy.zzz に送られることを意図して
いますか?

前者ならただ単に From: を置換するだけなので、formail -i や
formail -I でできそうです。後者なら sendmail -f xxx@xxx.yyy.zzz
でしょうか。

なお、僕は formail を使ったことはありませんし、できるか
どうか試してもいません。


@やままさん
> MAX_CHILDRED -> ?
む、typo ですね。直しました。御指摘ありがとうございました。


@ありさわさん
ケーブルを抜いた状況だとどうなるんですかね。多分僕なら一定時間で
タイムアウトさせて unreachable かどうかを判断すると思いますが、
本当はどうすべきなのかは わかりません。

それはそれとして、以下は ping で判断するという前提の話。
ping は ICMP プロトコルを使いますが、これは root 権限が
ないと実行できません。その証拠に ping コマンドは root に
suid されています。
    % ls -l /sbin/ping
    -r-sr-xr-x 1 root wheel 195956 Jul 27 23:31 /sbin/ping*
というわけで、素直 (?) にping コマンドを使うのがいいのでは
ないでしょうか。

No. 1301 # rosegarden 2000/10/30 (月) 01:00:45
>ケーブルを抜いた状況だとどうなるんですかね。多分僕なら一定時間で
>タイムアウトさせて unreachable かどうかを判断すると思いますが、
>本当はどうすべきなのかは わかりません。

OS 依存ですが、ifconfig -a とすると表示されることがあります。
下は FreeBSD の場合です。

dc0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
                inet 192.168.0.1 netmask 0xffffff00 broadcast 192.168.0.255
                inet6 fe80::xxx:xxxx:xxxx:xxxx%dc0 prefixlen 64 scopeid 0x1
                ether xx:xx:xx:xx:xx:xx
                media: autoselect (none) status: no carrier
                supported media: autoselect 10baseT/UTP <full-duplex> 10baseT/UTP none

no carrier というのがケーブルが抜けたことを意味していると思っても
だいたいあたっているはずです。一方、Solaris のように抜けた瞬間に
/var/adm/messages などに記録されるものもあります。

Solaris がでたついでなので、

>1. /var/log/messages や /var/log/maillog に詳細なエラーは出ていないか

Solaris の場合 sendmail のログは通例 /var/log/syslog に記録され、
BSD の /var/log/messages にあたるものは /var/adm/messages です。

No. 1302 # ありさわ [E-mail] 2000/10/30 (月) 11:48:01
No.1299の ありさわ です。
いろいろご回答いただきありがとうございます。
掲示板に書き込みしたのが初めてだったので、
返答が有ったことにチョット感激してます。

この件については結果的に、僕の技術不足で違う方法によって
対処をすることになりましたが、今後のためにこの件について
前の書き込みで説明が足りなかった分の説明をさせていただきます。

切断を検出して子プロセスをKillする一連の作業は
コマンドラインからではなくPerlプログラム内で行いたいです。
ついでに何を作成したかというと、ここのサンプルプログラムを
利用してネットワーク対戦のロビーサーバーを作成しました。

Q.LANケーブルを抜いたらどうなるのか?
まずこれは、クライアント側のLANケーブルを抜いた時のことです。

※LANケーブルを抜いた時の様子
・最初にケーブルがつながった状態でサーバーに接続をしにいきます。
・サーバーはこのクライアントに対して子プロセスを作成します。
・接続が確立した状態でクライアントのケーブルを引きます。
・子プロセスはクライアントとの接続が切れたことを認識できず
    残ったままになります。
・この作業(嫌がらせ)を何度もされると子プロセスが溜まっていって
    結果、サーバーがダウンするんじゃないか?って思ってます。

あたたかいご回答、本当にありがとうございました。

No. 1303 # 宗佑 [E-mail] 2000/10/31 (火) 18:34:11
ありがとうございます。

formailによる自動返信完了しました。
errorメールに関しても、本文に細工をしてなんとか解決しています。
こういうことが、やりたかったのも、UNIXのアカウント名とメールアカウント名が、まったく一致しない仕様のシステムを使っているので、外部に対する送信者が誰であるかを混乱させないようにする目的があったからです。
ありがとうございました

No. 1304 # Taka@万年初心者 2000/11/02 (木) 21:22:20
はじめまして。
GOOで検索してきました。
perlの事について質問があるのですが。。。。

perlを使ってActiveXのDLLファイルを舐めようと思っているのですが、全くもって方法が解りません。
ここの過去ログや、その他色々探して見ましたがそれらしいものは見当たりませんでした。

どうぞお解りになる方がいらっしゃいましたら御指導宜しくお願いします。

No. 1305 # 68user 2000/11/03 (金) 05:33:47
@rosegarden さん
> OS 依存ですが、ifconfig -a とすると表示されることがあります。
なるほど、勉強になりました。どうもです。

@ありさわさん
> 子プロセスはクライアントとの接続が切れたことを認識できず
> 残ったままになります。
という用途なら、TCP のタイムアウトを待つか、自前で
タイムアウトの機構を作るのが普通のような気がします。

@Taka さん
> perlを使ってActiveXのDLLファイルを舐めようと思っているのですが
「ActiveX の DLL を舐める」の意味からして さっぱりわかりません。
google で検索すると
    http://www.union-net.or.jp/~cgifaq/Archive/msg13177.html
        Subject: [cgi:13180] Re: Perl からActiveX のDLL を呼び出すには
というのが引っかかりますが、現在サーバの容量オーバーにより公開を
中止しているようで。あと perl モジュールの Win32::COM ってのが
ありますが、関係あるのかなぁ…。
    http://www2s.biglobe.ne.jp/~cru/library/zddbbs/cgi-bin/wwwboard.cgi
に行くと、その道の偉い人が教えてくれるかもしれません。

No. 1306 # 上條 誠 [E-mail] 2000/11/03 (金) 13:06:29
初めまして。
上條と申します。

かなり困っております。
どなたかお知恵を拝借願います。
現在Windows98にFTPサーバソフトをインストールしてあり、カスタマイズチューンナップされた
シェルのないFreeBSDにファイルをダウンロードさせたいのです。
FreeBSD側のコントロールはTelnetでコマンドを入力することにより、FreeBSD側は指定された
IPのFTPサーバに(この場合Windows98)接続をしてダウンロードを開始する仕組みなっています。
この際のFTPサーバへの21番にどういったコマンドが流れているのか不明ですが、様々なFTPサーバソフトを
試した結果、NDMTというコマンドがFTPサーバソフト側で処理できないこと、winftpdeamonの
コミュニケーションタイムがオーバーになるというエラーが出て、FTPサーバ側で切断をしてしまいます。
一度、Win98+wftpdでの成功例を聞いたことがありますが、色々設定を変えてみましたが、うまくいきません。

接続の形態としてはルータ支点に同ノード内の10BASE-T接続です。
Freebsd側とは全てのPORTで接続は出来ます。
プロトコルはTCP/IPを使用しています。

もっとも最初からLinuxやFreeBSDにFTPサーバをたてることが出きれば問題なく接続できることは
マニュアルに明記してあるのですが、私がFTPをたてるだけの技術がないことと、本日中という時間の中で
手元に使用できるLINUXなどがなく、大変困っております。
詳しい説明でなくても結構ですので、何か妙案がございましたら、どなたかお教えいただけないでしょうか。

よろしくお願いいたします。

No. 1307 # rosegarden 2000/11/03 (金) 15:33:00
AnHTTPD で HTTP 使ってダウンロードするのは?
FreeBSD の方は標準コマンドの /usr/sbin/fetch で落せますよ。

FreeBSD の 4.0-RELEASE 以降だと ftp クライアントの類は
passive mode で動作しますが、これはチェックしました?
passive mode をオフにするには /etc/login.conf
の default エントリで FTP_PASSIVE_MODE という環境変数を
セットしているから、そのファイルを書き換えて、NO にすれば
良いですよ。

思い付くのはこれだけですね。カスタマイズされているのだから、
これ以上答えようがないですね。

No. 1308 # rosegarden 2000/11/03 (金) 15:38:03
> FreeBSD の方は標準コマンドの /usr/sbin/fetch で落せますよ。

失礼、/usr/bin/fetch ですね。

それから wget でも良いかも知れません。
もっとも、FreeBSD がわで IPv6 の設定(デフォルト)してあると最近の
wget は IPv4 のオプションつけないと no route to host って
エラーを出すこともありますが。

No. 1309 # rosegarden 2000/11/03 (金) 15:39:32
> FreeBSD の方は標準コマンドの /usr/sbin/fetch で落せますよ。

失礼、/usr/bin/fetch ですね。

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