68user's page 掲示板

Prev< No. 3361〜3456> Next  [最新発言に戻る] [過去ログ一覧]
No. 3361 # 68user 2003/10/14 (火) 13:18:43
>>3360 yoshi
Windows98 上で FTP サーバを動かせば可能です。デフォルトでは
FTP サーバは用意されていないでしょう。フリー物がよければ
        http://www.forest.impress.co.jp/library/tinyftpd.html
などがよさそうに見えます。

なので、UNIX マシンに FTP でログインできるのも、
        「その UNIX マシン上で FTP サーバが動いているからログインできる」
ということです。

No. 3362 # しん [E-mail] 2003/10/14 (火) 16:31:16
はじめまして。
UNIXのことについて色々調べていたらこちらにたどり着きました。
以後よろしくお願い致します。

Tarコマンドについて質問があるのですが、
Tarコマンドのディレクトリ数の指定パラメータで
「.」と「./*」があり、
「./*」で指定した場合、ディレクトリ数の上限値があるそう
なのですが、その値はいくつなのでしょうか?

よろしければ教えてください。

No. 3363 # yoshi 2003/10/14 (火) 16:49:31
>>3361 68user

ありがとう御座いました!
そういう事だったのすね、早速やってみます!

No. 3364 # yoshi 2003/10/14 (火) 16:59:34
>>3361 68user
間違えて、書き込んでいる途中で送信してしまいました・・。
しかも脱字でした、すみません。
    ×そういう事だったのすね → ○そういう事だったのですね

家では実験できないので、会社で試してみるつもりです。
結果が分かり次第、報告させて頂きます!

No. 3365 # /tk 2003/10/14 (火) 17:05:39
>>3352 落合
http://x68000.startshop.co.jp/~68user/cgi-bin/wwwboard.cgi?howtouse
を読んだ後に cgi-ml で得た情報をコッチにも提供して欲しい気持ち。

>>3359 68user
> my ($ID, $name, $old) = split($_, '<>');
split の引数が逆ですぜ。

No. 3366 # 68user 2003/10/14 (火) 17:20:10
>>3362 しん
> Tarコマンドのディレクトリ数の指定パラメータで
> 「.」と「./*」があり、
> 「./*」で指定した場合、ディレクトリ数の上限値があるそう
> なのですが、その値はいくつなのでしょうか?
「ディレクトリ数の指定パラメータ」というくだりが いまいち
よくわかりませんが、要は
      % tar cf /foo/bar.tar .
だとエラーにならないのに、
      % tar cf /foo/bar.tar ./*
だとエラーになるのはなぜか、ということでしょうか?

であれば
      http://www.jp.freebsd.org/QandA/HTML/2111.html
をどうぞ。

ちなみに ARG_MAX は FreeBSD なら 64KB ですが、Solaris は
1MB です。手元の Linux マシンを見てみると 128KB でしたが、
ディストリビューションごとに異なる可能性はあります。

No. 3367 # 68user 2003/10/14 (火) 17:38:30
>>3365 /tk
> を読んだ後に cgi-ml で得た情報をコッチにも提供して欲しい気持ち。
      http://script.lovely.to/bbs/infolng.cgi?print+200309/03090012.txt
には報告して、こっちには報告してくれないのは嫌われている
からでしょうか。

って、どうせもう読んでないだろうからどうでもいいんですが。

最近は返事がなくても、クイズのつもりで回答しています。
悟りの境地に達したのかもしれない。

>> my ($ID, $name, $old) = split($_, '<>');
> split の引数が逆ですぜ。
おっと失礼しました。
      my ($ID, $name, $old) = split('<>', $_);
ですね。
  

No. 3368 # gaji 2003/10/14 (火) 19:40:36
ftp上のlsの挙動に関する質問です。
ftpサーバのOSはSolaris9です。
Bシェルでクライアント側のプログラムを作成しています。
ftp上で下記のようにワイルドカードでファイルを指定し、その結果をlsresult.txtファイルに出力しようとしています。

ftp>ls ?????.txt lsresult.txt


しかし、?????.txtに該当するファイルが無いと、クライアント側にはlsresult.txtファイルが作成されません。
様々な挙動調査の結果、lsを行うディレクトリがrootユーザーのものだとlsresult.txt自体が作成されませんが、一般ユーザーだと0バイトのlsresult.txtが作成されるという挙動の差異がありました。
lsに該当するファイルがなかった時に表示される「No such file or directory」というメッセージがlsresult.txtに出力される事を期待していますが、そのメッセージが応答されていないようです。
また、プログラムからでなく、コマンドラインから同じ事をしても同様の挙動でした。
なお、Solaris8等の他のマシンで動作確認したところ、lsに該当するファイルが無い場合には、lsresult.txtに「No such file or directory」のエラーメッセージが出力されました。
エラーメッセージの出力に関する設定、ftpdの違い、OSの違い等、疑うところはいろいろあるのですが、ftp上のls自体は機種等の環境に依存してしまうものでしょうか。
上記の説明で何が問題か分かりますでしょうか。
よろしくお願い致します。

No. 3369 # 68user 2003/10/14 (火) 20:12:08
>>3368 gaji
ftp サーバの OS は Solaris9 だと言うことはわかりましたが、
クライアント側の環境は何ですか?

ftp プロトコル自体には結果をファイルに落とすかどうかという
やりとりはありません。よって、ファイルに落とすか処理を行なう
のはクライアント側です。まずはクライアント側の環境を疑った
方がよいと思います。

> lsを行うディレクトリがrootユーザーのものだとlsresult.txt自体が
> 作成されませんが、一般ユーザーだと0バイトのlsresult.txtが作成
> されるという挙動の差異がありました。
「ls を行うディレクトリ」というのは、
        ftp> cd /hoge
        ftp> lcd /fuga
        ftp> ls ?????.txt lsresult.txt
としたときの「/hoge」のことを指していますか? それとも「/fuga」の
ことを指していますか?

また、ftp クライアントを実行するユーザの違いで挙動が変わりますか?

No. 3370 # gaji 2003/10/14 (火) 20:44:36
>>3369 68user
早速回答いただきましてありがとうございます。
今、お答えできる情報のみで申し訳ありませんが回答致します。

>ftp サーバの OS は Solaris9 だと言うことはわかりましたが、
>クライアント側の環境は何ですか?
Solaris2.6です。

>「ls を行うディレクトリ」というのは、
> ftp> cd /hoge
> ftp> lcd /fuga
> ftp> ls ?????.txt lsresult.txt
>としたときの「/hoge」のことを指していますか? それとも「/fuga」>のことを指していますか?
/hogeの事を指しております。

クライアント側は同じ状態にしておいて、FTPサーバ側をいろいろ変えて挙動が変換するので、サーバ側の問題かと思っていましたが、クライアント側も調べてみます。

No. 3371 # gaji 2003/10/15 (水) 21:58:03
>>3370 gaji
ftpのlsを調査した結果、以下の事が分かりました。
---------Solaris8がFTPサーバの時----------------------------
ftp> ls ?????.txt local.txt
200 PORT command successful.
150 ASCII data connection for /bin/ls (192.168.122.8,45207) (0 bytes).
226 ASCII Transfer complete.
local: local.txt remote: ?????.txt
49 bytes received in 0.012 seconds (3.90 Kbytes/s)
---------Solaris9がFTPサーバの時----------------------------
ftp> ls ?????.txt local.txt
200 PORT command successful.
550 ?????.txt: No such file or directory.

Solaris8のケースでは、/bin/lsによって処理されて、該当ファイルが存在しなくてもlocal.txtが作成され、中にエラーメッセージが出力されました。
Solaris9のケースでは、/bin/lsを使用していない?様です。
ftpdの内部コマンドで処理されているのでしょうか。
この場合は、local.txtが作成されていません。
ちなみに、ftp上でls -a等を行うと、Solaris8,9共に/bin/lsで処理されているようです。
lsとls -aでは、FTPプロトコルはNLSTとLISTのように違うと思いますが、インターネットで調べた限りでは「ls -aやdirなどは/bin/lsで処理され、lsはftpdの内部コマンドで処理される事が多い。」との記述がありました。しかし、今回のケースではSolaris8でのlsは/bin/lsで処理されているようです。ftpのNLSTが内部コマンドを使用するか、/bin/lsを使用するかは設定可能なものでしょうか。
もし、Solaris9でのlsも/bin/lsを使用するように設定変更可能なものであれば、設定変更して動作検証したいと思います。
もし、ご存知でしたらご教授いただきたいと思います。

No. 3372 # 68user 2003/10/16 (木) 00:22:37
>>3371 gaji
なるほど、ftpd の挙動が変わったのですね。

> ls -aやdirなどは/bin/lsで処理され、lsはftpdの内部コマンドで
> 処理される事が多い。
そういう実装が多かった、というのは確かかもしれません。
ただ、ProFTPD のように /bin/ls に一切頼らない ftp
サーバもありますので、あくまで「多かった」という程度
だと思います。

> ftpのNLSTが内部コマンドを使用するか、/bin/lsを使用するかは
> 設定可能なものでしょうか。
Solaris8, Solaris9 の ftpd を見る限りでは、そのような
設定はできないようです。
    http://www.freebsd.org/cgi/man.cgi?query=ftpd&&manpath=SunOS+5.8&format=html
    http://www.freebsd.org/cgi/man.cgi?query=ftpd&&manpath=SunOS+5.9&format=html

> ftp> ls ?????.txt local.txt
> 200 PORT command successful.
> 550 ?????.txt: No such file or directory.
もしクライアント側が LIST を発行しているとしたら
(ftp -d で確認できます)、LIST に対して 550 を返すのは
RFC 違反ではないかなぁと思いました。

      http://hp.vector.co.jp/authors/VA002682/rfc959j.htm より引用

      以下の表では、それぞれのコマンドごとの成功・失敗の応答を一覧表にしてあ
      る。これらは、確実に忠実でなくてはならない。サーバーは応答中の文章を変更
      してもよいが、その意味、コード番号により示される動作と指定されたコマンド
      応答シーケンスは変更してはならない。

      コマンド応答シーケンス
              LIST
                    125, 150
                          226, 250
                          425, 426, 451
                    450
                    500, 501, 502, 421, 530

この解釈が正しいなら、Sun に文句を言えば直してくれる
かもしれません。

ただ、ftp は規格が曖昧で、実装依存の塊みたいなものなので、
ls してクライアント側で grep した方が後々のためにもよい
かもしれません。ファイルに落として grep するとか、
      ftp> ls . "|grep ^.....\.txt$ >hoge"
とするとか。

No. 3373 # yoshi 2003/10/16 (木) 23:23:36
>>3361 68user

68userさんのご助言通り、
ftpサーバをPCに入れてみました所、上手くいきました。
ありがとう御座いました!

No. 3374 # とーりすがり 2003/10/20 (月) 17:13:15
>>3371 gaji
確か、Solaris9からwu-ftpdベースになっている筈です。

以下man ftpaccess(4)から...
/etc/ftpd/ftpaccess
lslong /usr/bin/ls
lsshort /usr/bin/ls
lsplain /usr/bin/ls

上記3行を追加してみては如何でしょうか...
外していたらごめなさい。
ではでは

No. 3375 # gaji 2003/10/21 (火) 19:22:13
>>3374 とーりすがり
情報の提供ありがとうございます。
試してみたいと思います。
>確か、Solaris9からwu-ftpdベースになっている筈です。
これは、私も何かの書籍で見た記憶があります。
また、何か情報がございましたらお願いします。

No. 3376 # 新米 2003/10/22 (水) 01:15:16
イーサカード(hme等)のインスタンス番号についてご教授ください。
hme0と認識されているカードをカード実装位置を変えずにhme5のようにインスタンス番号のみ変更することは可能でしょうか?

No. 3377 # foofoo 2003/10/22 (水) 16:02:09
送信サーバ認証が不要な SMTPサーバではサーバ外メール送信は実現できています。
しかし、送信サーバ認証が必要な SMTPサーバではサーバ外メールを送信できません。(Outlook Express ではサーバ外メール送信OK)

SMTP AUTH と POP Before SMTP を試しました。

SMTP AUTH は NONE-SUPPORT のメッセージが返りました。

POP Before SMTP として、POPサーバに USER と PASS コマンドを使い認証を受けた後(正常終了)で QUIT の直後に、SMTPサーバ にconnectし、HELO, MAIL FROM: とコマンドを送信し、RCPT TO: で 550 5.7.1 と Relay エラーを出してしまいます。

POP Before SMTP を実現するためのコマンドシーケンスを教えてください。

VC++ 6.0 Windows98SE

宜しくお願い致します。

No. 3378 # リダイレクションを引きとして渡す 2003/10/22 (水) 20:48:05
関数にリダイレクションを引数として渡したいのですが
どうも上手くいきません。ご教示お願いいたします。(OS:HPUX)

KANNSUU(){
echo "A" $1 tmp.txt
}

KANNSUU >

結果:"A > tmp.txt"と表示されてしまう。

No. 3379 # 68user 2003/10/22 (水) 21:24:53
>>3374 とーりすがり
> 確か、Solaris9からwu-ftpdベースになっている筈です。
おお、ほんとうですね。
      http://docs.sun.com/db/doc/816-3965/6ma7896j8?l=ja&q=wu-ftpd&a=view
知りませんでした。

ってゆーか、まわりに Solaris9 環境がなかったりするんですけどね。

>>3376 新米
> hme0と認識されているカードをカード実装位置を変えずにhme5の
> ようにインスタンス番号のみ変更することは可能でしょうか?
(Solaris かどうか書いてないのでわかりませんが) Solaris の
ifconfig はいろんな設定ができるので、できるかもしれませんし、
できないかもしれません。

>>3377 foofoo
> POP Before SMTP を実現するためのコマンドシーケンスを教えてください。
POP でアクセスすればそれでよいはずです。


その前に、調べ方が効率悪すぎです。

まずはサーバがどういう認証方法を取っているか調べましょう。それが
できないなら、ethereal などのパケットアナライザを使って、Outlook が
どういうふうに接続しているか調べましょう。


>>3378 リダイレクションを引きとして渡す
eval を使って
      KANSUU(){
          eval "echo 'A' $1 tmp.txt"
      }
とします。しかし、そのうちメッセージやファイル名に空白や
シングルクォート・ダブルクォートが入ってたら〜とかいう
話になると思うので、
      KANSUU(){
          if [ $2 = 0 ]; # file 出力モード
                echo $1 > tmp.txt
          else # 標準出力モード
                echo $1
          fi
      }
的な書き方をお勧めしておきます。

No. 3380 # foofoo 2003/10/23 (木) 02:09:44
>>3379 さん、ありがとうございました。

> POP でアクセスすればそれでよいはずです。

何かが悪いのでしょうが、前の記述通り、POP から SMTP の切替て RCPT TO:で 550 が発生してしまいます。

うまく行っている Outlook を ethereal でトレースしようと思います。
ethereal のようなトレースツールも知りたかったので大変うれしく思っています。
早速 ethereal をダウンロードしてトレースしてみます。

テスト後ご報告致します。

foofoo

No. 3381 # foofoo 2003/10/23 (木) 14:10:56
>>3379 68user
68userさん、大変ありがとうございました。

etherealを使いトレースしたところ、Outlook Expressは、POP Before SMTP ではなく、AUTH LOGIN コマンドを使っていることがわかりました。

< EHLO xnn000<CR><LF>
> 250
< AUTH LOGIN
> 334,334,235
< MAIL FROM:
> 250
      :
      :

Outlook Expressと同じ手順でOKにはなりました。

新たに不明な点が出てきました。
AUTH LOGIN の前に発行するEHLO に不明なアドレスのパラメータがついていました。
そのアドレスは、レジストリーで調査してもWindowsに設定されたアドレスでもなく、Outlook Express の設定の中にも無い下記のようなアドレスでした。
EHLO xnn000<CR><LF>
  注:x:a〜zまでの内の1文字 nn:00〜99までの数字

所持メールアドレスは、送信メールサーバで認証の必要なものは1つしか持ち合わせがないため、他のメールサーバの時にどうなるかを確認できません。

このアドレスの根拠についてご存知の方、教えてください。

宜しくお願いします。

No. 3382 # foofoo 2003/10/23 (木) 14:14:38
>>3381 foofoo
記載ミス

失礼しました、コマンドを統一表記していませんでした。
EHLO 以外も、Trailer として <CR><LF> は全て付加されています。

No. 3383 # ふくし [E-mail] 2003/10/23 (木) 15:17:40
お久しぶりです。質問です。
さいきん MovableType に手を染めたのですが、
結構快調に使えていたんですが、rebuild 時に
500 Internal Server Error になるようになりました。
ずっとエラーになっても、再構築はできてたっぽかったんですが、
このたびついに再構築じたいできなくなりました。
(いつまでたっても古いページのまま)

ドキュメントを見ると index.html を index.html.new に
退避してから書き込み動作を行い、
それが終わったら new を index.html に変名するような仕様に
なっているが、この場合 mt ルートディレクトリののパーミッションが
777 になってないといけない、とあったので、
みてみると、たしかに 755 だったので、777 にすると、
今度は書き込み動作をしようとするといきなり 500 になりました。

あわてて 755 に戻すと、書き込み動作時のエラーはなくなりましたが、
相変わらず再構築時にエラーになります。
で、ドキュメントに、index.html.new を作らない設定にするには
mt.cfg の NoTempFiles 1 を非コメント化するようにと言われたので、
しましたが、効きません。

なお、ルートには確かに index.html と index.html.new があって、
index.html のタイムスタンプは最後に再構築できたときです。
パーミッションは両方 666 です。
Perl は 5.005_03、
UNIX は FreeBSD 4.5-RELEASE-p36 #2
です。何かわかりましたら教えてください。
あと、板違いの場合はよさげな板を教えてくだされば幸甚です。
よろしくお願いします。

No. 3384 # ふくし [E-mail] 2003/10/23 (木) 15:29:33
<<3383
ティピカルな問題かも。
http://www2h.biglobe.ne.jp/~hnakamur/technolab/diary/2003/20030810.htm

system 'ulimit'; とかどっかに入れたろか ;;;

No. 3385 # 68user 2003/10/23 (木) 18:49:51
>>3381 foofoo
> EHLO xnn000<CR><LF>
> 注:x:a〜zまでの内の1文字 nn:00〜99までの数字
これについてはわかりません。
        http://www.puni.net/~mimori/smtp/ref.html#ehlo
には
        SMTPサーバは、実際にはTCP/IP接続のIPアドレスなどの情報から
        クライアントを識別すべきである。
とあるので、Outlook Express はあえて適当なホスト名を生成して
いるのかもしれません。

自分の FQDN を知っているならそれを、知らないなら IP アドレスを
渡しておけばいいのではないでしょうか。


>>3383 ふくし
> rebuild 時に 500 Internal Server Error になるようになりました
これだけでは「理由はわからないがエラーになる」と言っているのと
同じなので、原因を調べましょう。

    - web サーバのエラーログには何と出ているか
    - CGI として起動したときの truss や ktrace の結果はどうなるか
    - コマンドラインから実行するとこけるか

もし原因が limit である可能性が濃いなら、さらに以下のことを
調べましょう。

    - CGI として起動したときの limit 値は
        (apache なら設定ファイルに書いてあるかも)
    - コマンドラインから起動したときの limit 値 (シェルの limit 値) は
    - ソフトリミットか、ハードリミットか (ハードリミットなら変更不可)
    - suid などで他の権限になれるか。なれるとしたらそのリミット値は?
    - なぜこけるのか。
            手元の Solaris で試した限りでは、
                - datasize の制限なら、malloc(3) して、brk(2) したときに
                    ENOMEM が返ってきてこける
                - stacksize の制限なら、segmentation fault でこける。
            となりました。FreeBSD でも同じかどうかはわかりません。

> system 'ulimit'; とかどっかに入れたろか ;;;
これだと子プロセスのシェルの limit 値は変わるかもしれませんが、
自分自身の limit 値は変わりません。

CPAN から setrlimit(2) するライブラリを拾ってくるか、自分で
syscall で呼ぶ必要があります。

# ただし、ハードリミットならどうしようもありません。

No. 3386 # ふくし 2003/10/23 (木) 21:27:25
>>3385 68user
さん、いつもありがとうございます。
すみません、レンタルサーバー(さくらウェブ)が
ログを見せてくれません。
telnet は使えるので、もう少しいろいろやってみます。
検索した限りでは同じサーバーで同病の人が多いので
制限のようですが、どのレベルでの制限かはまだわかりません。

No. 3387 # foofoo 2003/10/24 (金) 11:18:10
>>3385 68user
68user さん、ありがとうございました。
コメントを参考に対処していきます。

No. 3388 # peace 2003/10/25 (土) 23:20:56
fork関数とselect関数の違いが分かりません。誰か教えてくれませんか?

No. 3389 # 68user 2003/10/25 (土) 23:24:31
>>3388 peace
fork は子プロセスを生成します。
select は複数の入出力インタフェースを監視するものです。

No. 3390 # peace 2003/10/26 (日) 12:00:38
selectは親プロセス、子プロセスが存在しないのですか?

No. 3391 # 68user 2003/10/26 (日) 12:28:31
>>3390 peace
select は複数のプロセスを扱うためものではなく、1 つの
プロセスが複数のソケット (*1) を同時に扱うためのものです。

たとえば
    http://www.goo.ne.jp
    http://www.yahoo.co.jp
    http://www.asahi.com
を読みたいが、時間短縮のため 3サーバ同時に接続したい、という例が
    http://x68000.startshop.co.jp/~68user/net/http-parallel-1.html
にあります。

ここではプロセスはひとつしか出てきませんが、ソケットは 3つ
使用しています。

*1: 本当はファイルディスクリプタ

No. 3392 # peace 2003/10/26 (日) 14:01:54
ありがとうございました。

No. 3393 # doronjo [E-mail] 2003/10/27 (月) 10:16:36
以下のコマンドの意味が解りません。よろしくお願いします。
jobschmsgevent

jobschcontrol

if ( -f ./renkei.zip ) thenの中の-f ./

No. 3394 # Netboy 2003/10/27 (月) 10:53:24
>>3393 doronjo
jobなんたらは判らないのですが,-fはファイルテスト演算子です.
./renkei.zipがファイルとして存在するとき真を返します.
./は相対パスでrenkei.zipが実行中のスクリプトと
同じディレクトリにあることを示します.

68userさん
hosts.allowの件いかがですか.
どうにもなりませんか...

No. 3395 # 68user 2003/10/27 (月) 13:38:09
>>3393 doronjo
> jobschmsgevent
> jobschcontrol
Systemwalker のコマンドのようですね。付属のマニュアルを
読みましょう (わたしは Systemwalker を持ってないので
わかりません)。

>>3394 Netboy
> hosts.allowの件いかがですか.
ああああすいません、すっかり忘れていました。本日中には必ず。

No. 3396 # doronjo 2003/10/28 (火) 13:10:35
68userさん、ありがとうございました。

No. 3397 # しんさん 2003/11/06 (木) 11:17:37
はじめまして。
LINUX上にて複数のGIFファイルを1つのPDFファイルに
変換指定のですが…。
とりあえず convert コマンドでできますかね…?
こんな感じで…
  convert abc*.gif newfile.pdf

No. 3398 # MAX 2003/11/06 (木) 18:58:23
いつも参考にさせていただいています。

質問があります。
FreeBSD4.8でウェブサーバをたてました。
インストール時にタイムゾーンを JST に設定しました。
FTPアカウントを一つ設定し、3ヵ月後にFTPアカウントをいくつか追加しました。

インストール後にすぐ作成したアカウントを使い、
FTPサーバにFTPクライアントでログインし、
新規にファイル等をアップロードすると、ファイル作成日が正しくJSTで表示されます。

しかし、追加した方のアカウントで同じようにFTPでログインし、
ファイル等をアップロードした所、なぜかUTCでファイル作成日等が表示されてしまいます。

date コマンドでは Thu Nov 6 18:42:54 JST 2003 等と正しく表示されます。
.shtml ファイルをアップし、そのなかにSSIコマンドでローカルタイムを取得すると、
どちらのアカウントでも正しくJSTで表示されます。

なぜ同じサーバなのに、FTPクライアントのみUTCで表示されたり、
アカウントによってタイムゾーンが異なって表示されたりするのでしょうか?
FTPクライアントの設定は全く同じ環境ですし、クライアントマシン自体のタイムゾーンももちろんJSTです。
/stand/sysinstall で再度タイムゾーンの設定もしました。
ntpdate コマンドで、再度時刻修正もしました。

申し訳ありませんがご教授願います。

No. 3399 # 68user 2003/11/06 (木) 19:25:38
>>3397 しんさん
> とりあえず convert コマンドでできますかね…?
> convert abc*.gif newfile.pdf
実際に試してみればできるかどうかはわかるでしょう。

convert は ghostscript に頼らないと pdf を読み書き
できないはずです。あと、複数の画像をひとつのファイルに
まとめることができるのかどうかは非常に怪しいような気が
します。

>>3398 MAX
> 新規にファイル等をアップロードすると、ファイル作成日が正しく
> JSTで表示されます。
これと
> ファイル等をアップロードした所、なぜかUTCでファイル作成日等が
> 表示されてしまいます。
これは、当然同じ FTP クライアントを使っているんですよね。
また、サーバ再起動などもしてないんですよね。

うーん、なんでしょうねぇ。/etc/login.conf の ftp-chroot や
timezone の違いですかねぇ。

No. 3400 # MAX 2003/11/07 (金) 04:40:04
>>68userさん

レスありがとうございます。
すみません、自己解決できました!

最初に作成したFTPアカウントは、/etc/ftpchroot にアカウント名を記載しておらず、
後で作成したFTPアカウントは、/etc/ftpchroot にアカウント名を記載してました。

ftpchroot すると、/etc/localtime を読まなくなるんですね。。。
この事を知らなかった為、こういう事になっていました。

お騒がせしてスミマセンでした ^^;

No. 3401 # しんさん 2003/11/07 (金) 09:32:11
ご返答ありがとうございます。
今はLINUXの環境が無いので整い次第試してみます。

すみませんが、初心者の為もう少し突っ込んだ質問をさせて下さい…。

1.LINUX上でGIFファイルをPDFファイルに変換する為には
        ghostscript を使用しなければ出来ないのですか?
2.ghostscript について知りたいので簡単で良いので説明していただけませんか?
        ※無理であれば何処か参考になる URL を教えてください。
3.convert コマンド以外の方法は何かありますか?

よろしくお願いします。m(_ _)m

No. 3402 # kon 2003/11/07 (金) 12:01:59
    初めまして。初めて書き込みします。konと言う者です。よろしくお願いします。
    早速質問なのですが、最近BSD(すいませんバージョンは分かりません)のrootログインシェルをchshコマンドで変更していたところ、ファイルの場所を間違って指定してしまったために Permission denied と出てログインできなくなってしまいました。どうすれば元に戻すことが出来るのでしょうか?どなたかアドバイスをお願いします。

No. 3403 # てんびん [E-mail] 2003/11/08 (土) 02:12:34
質問があります。とても困りました。
rootで作業中、/binを誤って別名のディレクトリに変えてしまいました。
すると、全くログインできなくなってしまいました。
復旧するにはどうすればいいのでしょう?よろしくお願いします。

No. 3404 # 68user 2003/11/08 (土) 15:58:05
>>3400 MAX
> ftpchroot すると、/etc/localtime を読まなくなるんですね。。。
わかっておられるかもしれませんが、読まないというよりは
読めない、です。

/home/ftp/ に chrootするとしたら、/home/ftp/ が / になり、
/home/ftp/etc/localtime が /etc/localtime になるわけで、
/etc/localtime を /home/ftp/etc/localtime にコピーして
おく必要があります。

>>3401 しんさん
ghostscript に関する情報は、google で調べる方が早いでしょう。

要は ps2pdf という PostScript を PDF に変換するアプリが
ghostscript に同梱されており、convert はそれを利用して
PDF を出力している、ということです。ps2pdf は直接実行する
こともできます。

>>3402 kon
シングルユーザモードで起動してシェルを元に戻すしかないと
思います。もしマシンがリモートにあるなら、手の出しようが
ないです。

あるいは一般ユーザでログインし、root 権限を奪取するような
脆弱性を突くとか。

>>3403 てんびん
別のメディアからブートして /bin を元に戻してください。

FreeBSD なら fixit フロッピーでブート。Solaris なら
    http://sdc.sun.co.jp/solaris/solaris2-faq/Q5.47.html
など。

No. 3405 # yuu [E-mail] 2003/11/09 (日) 04:21:20
初めて書き込みをしますyuuといいます、どうぞよろしくお願いします。
ここのページを見て、ネットワークプログラムを勉強しようとしているのですが、どうもfork関数を使ったサーバと、select関数を使ったサーバの違いが理解できないでいます、なにぶんまったくの初心者なので・・・もしよろしかったら教えていただけないでしょうか?

No. 3406 # 68user 2003/11/09 (日) 19:49:34
>>3405 yuu
http://x68000.startshop.co.jp/~68user/net/echo-3.html
http://x68000.startshop.co.jp/~68user/net/echo-4.html
を読んでください。

これでわからないなら、
    「自分はこのように理解しているが、この部分の違いが
        わからない」
という書き方をしてください。

No. 3407 # てんびん 2003/11/09 (日) 23:56:36
>>3404 68user
CDROMから起動し、/binに戻すことができました。
どうもありがとうございました。

No. 3408 # doronjo 2003/11/10 (月) 16:55:28
if ( $BS_FLG == "1")の中の『==』はどういう意味でしょうか

No. 3409 # 68user 2003/11/10 (月) 18:11:20
>>3408 doronjo
$BS_FLG の内容が 1 ならば、ということです。

No. 3410 # doronjo 2003/11/11 (火) 08:48:10
if文の"="と"=="の違いを教えて下さい。

No. 3411 # 68user 2003/11/11 (火) 09:44:33
どこまでこんがらがるか楽しみなのでお付き合いします。

> if文の"="と"=="の違いを教えて下さい。
言語名が書いてないので
        if ( $BS_FLG == "1")
と書くことのできる言語を想像すると、わたしの脳内では
csh と perl が候補にあがりました。

csh では if ( $BS_FLG = "1" ) はエラー。
if ( $BS_FLG == "1" ) は文字列として比較。
# ただし試したのは FreeBSD の csh なので、実質 tcsh ですね。

perl では if ( $BS_FLG = "1" ) は代入文扱いされ、常に真。
-w オプションを付けると「== と書け」と怒られます。
if ( $BS_FLG == "1" ) は数値として比較でした。

No. 3412 # doronjo 2003/11/11 (火) 10:00:53
ちょこちょこ何度もすみません。
またif文なんですが、
if ( -z zbwsy200.csv ) then の"-z"の意味と、ほかのif文で"&&"とありますがこれはandと同じ意味ですか

No. 3413 # 68user 2003/11/11 (火) 14:11:10
>>3412 doronjo
then ってことはおそらく csh なので、csh のマニュアルを
読んでください。

man csh で読めます。

No. 3414 # doronjo 2003/11/12 (水) 11:26:40
ありがとうございました。
cshの本をいいのがないか本屋で探しているんですが見つかりません。
いい本知ってましたら教えていただけないでしょうか。
(特にif文が詳しく載っている物)

No. 3415 # ふくし [E-mail] 2003/11/14 (金) 14:17:01
いつもすいません。
KNOPPIX(Debian ベース、unstable)でサーバーを立て、
Postfix を入れましたが、メールが受信できません。
(前はできていたが、何らかのきっかけでできなくなった)

Nov 13 22:52:10 myserver postfix/smtp[747]: 32C741384AD: to=<me@myserver>, relay=none, delay=27294, status=deferred (Name service error for myserver: Host not found, try again)

メールをくれた人のサーバーも自分も無事 dig できます。
/var/spool/postfix/etc/resolv.conf も最新です。
/etc/postfix/master.cf で chroot は全部 n です。

/etc/postfix/main.cf はこんな感じです。
# see /usr/share/postfix/main.cf.dist for a commented, fuller
# version of this file.

# added by suggestion (fukushi)
myhostname=myserver.mydomein
alias_maps=hash:/etc/aliases
alias_database=$aliase_maps

# Do not change these directory settings - they are critical to Postfix
# operation.
command_directory = /usr/sbin
daemon_directory = /usr/lib/postfix
program_directory = /usr/lib/postfix

smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU)
setgid_group = postdrop
biff = no

# appending .domain is the MUA's job.
append_dot_mydomain = no


home_mailbox=Maildir/

allow_mail_to_commands=alias,forward,include
ignore_mx_lookup_error = yes

メーラーは Mew ですが、
ログインしたら you have mail じたいでないので
postfix が悪いのかと・・・
思ってたら
/var/spool/postfix/deferred
に着いたメールがたまってました。

何かお分かりでしたらご教示願います。

No. 3416 # ふくし [E-mail] 2003/11/14 (金) 16:00:05
自己レスです。
読めないと騒いでいたのは同じ社内の Windows クライアントから
Outlook で同じ社内の Exchange Server を使って出したメール
なのだが、

me@myserver

ではだめで、

me@myserver.domain

でFQDN名で指定しないとダメでした。
おさわがせしました。

No. 3417 # 68user 2003/11/18 (火) 05:45:57
UNIX の部屋
    http://x68000.startshop.co.jp/~68user/unix/
を更新しました。

No. 3418 # 初心者 2003/11/23 (日) 01:34:51
はじめまして。UNIXのコピー(?)というかフリーソフト
が欲しいんですけど、配られてるところ(URL)を
教えてくれませんか??

No. 3419 # 68user 2003/11/23 (日) 02:26:43
>>3418 初心者
OS はなんですか? (FreeBSD 4.8 とか Solaris 8 とか RedHat Linux 9
とか Debian GNU/Linux 3.0 とか)

No. 3420 # yoshi 2003/11/23 (日) 02:49:54
こんにちは、以前質問させて頂きましたyoshiと申します。

unameコマンドについて質問なのですが、
このコマンドの語源は何なのでしょうか?

他のコマンドは大体英単語を捩った物が多いと思うのですが、
このコマンドだけ、"u"の意味が良く分からないもので・・・。

ご存知の方いらっしゃいましたら、ご教授願います。

No. 3421 # 68user 2003/11/23 (日) 05:12:12
>>3420 yoshi
> unameコマンドについて質問なのですが、
> このコマンドの語源は何なのでしょうか?
FreeBSD 5.1-RELEASE の uname(1) には
        http://www.freebsd.org/cgi/man.cgi?query=uname&manpath=FreeBSD+5.1-RELEASE&format=html
            HISTORY
                The uname command appeared in PWB UNIX.
とあります。

PWB (Programmers Work Bench) UNIX の位置付けは
        http://www.levenez.com/unix/history.html
をどうぞ。簡単に言うと V6 UNIX から分岐し、SVR3 に統合された古代の
UNIX です。

# ちなみに他の OS のマニュアルにはたいしたことは書いてありませんでした。

で、古代の UNIX と言えば、SCO が公開した V6 や V7 のソース
        http://minnie.tuhs.org/TUHS/archive_sites.html
をあたってみるべきです。そこをつらつらと眺めると…おぉ、そのもの
ずばり PWB という文字を発見。
        http://www.tribug.org/pub/tuhs/PDP-11/Distributions/usdl/bostic_pwb.tar.gz

早速展開してみると、マニュアルがありました。
        % find . -name uname\*
        ./pwb.5/pwb.2/usr/man/man1/uname.1
        ./pwb.5/pwb.2/usr/man/man2/uname.2

uname.1 の中身は以下の通り。
        % cat ./pwb.5/pwb.2/usr/man/man1/uname.1
        .th UNAME I 5/31/77
        .sh NAME
        uname \*- print name of current UNIX
        .sh SYNOPSIS
        .ft B
        uname
        .ft R
        .sh DESCRIPTION
        .it Uname
        prints the current name of UNIX on the standard output file.
        It is mainly useful to determine what system one is using.
        .sh "SEE ALSO"
        uname(II)

PWB で拡張されたシステムコールらしきソースをみると、以下のように
なっています。

        ./pwb.5/pwb.2/sys/sys/os/pwbsys.c
                pwbsys()
                {
                                extern uchar;
                                register i;
                                register *p;
                                register struct buf *bp;

                                switch(u.u_arg[0]) {
                case 0: /* uname */
                                if (copyout(&pwbname, u.u_ar0[R0], 8))
                                                u.u_error = EFAULT;
                                return;

つまり uname(2) は pwbname を返しているだけ。その pwbname は
        char pwbname[9] "pwbname";
と定義されていました。

uname(2) のマニュアルには (以下、FreeBSD の nroff に喰わせた出力)

        uname get name of current PWB/UNIX
        (pwbsys = 57.; uname = 0)
        (pointer to name in r0)

        returns in the 8 byte character name of the current PWB/UNIX.
        The name is not null-terminated. By convention, the name is of
        the form pwb?date. For example, pwba0401 would indicate that
        this is PWB/UNIX System A and that its operating system was last
        modified on April 1. This function is kept in the library. un-
        ame(I) The error bit(c-bit) is set if can not be written. From
        C, a 1 return indicates an error.

とありますので、リリース時は pwbname で、バージョンアップ時に
pwba0401 などと書き換えてからコンパイルすることを意図したもの
だったようです。


というわけで、今日のトリビア:

        uname の u は … UNIX の U である。
        uname(2) は … 昔は uname(II) と書いていた。

補足トリビア:

        当然 clri(8) は clri(VIII) である。

No. 3422 # yoshi 2003/11/23 (日) 19:29:46
>>3421 68user

回答有難う御座いました!
お蔭様で、unameコマンドの語源を理解する事が出来ました。

調べるというのは、こういう事を言うのだなぁと目から鱗な心境です。
私もいつか68userさんの様に、自力で調べられる様に頑張りたいと思います。

No. 3423 # 初心者 2003/11/23 (日) 23:47:30
>>3419 68user
あまりよく分からないんですけどBSD系(?)がほしいです(^^;

No. 3424 # George 2003/11/25 (火) 19:34:48
はじめまして。Perlのネットワークプログラミングに際し、大変重宝させていただいております。

http://x68000.startshop.co.jp/~68user/net/http-parallel-1.html
の"HTTPの並行アクセス"スクリプトについて、ちょっと気になる点がありましたので書かせていただきます。

読み込みが終了したソケットについて

$selecter->remove($sock); # select の対象から外す

として、セレクタから外すだけになっていますが、外した後で

$sock->close;

としてソケットを閉じたほうがいいんじゃないでしょうか?

そうしないと、すべてのデータの転送が完了しスクリプトが終了するまで、全ソケットが開きっぱなしになってしまうように思うのですが。

もし、ソケットを一つ一つ閉じる必要がないのでしたら、その理由を教えていただきたいです。

No. 3425 # 68user 2003/11/26 (水) 01:04:43
>>3243 ひろ
UNIX 的 OS を欲しいのか、UNIX 上で動作するソフトウェアが
欲しいのかわからなかったのですが、とりあえず前者とすると、
以下の URL などがよろしいのではないかと。
      FreeBSD
          http://www.jp.freebsd.org/www.FreeBSD.org/doc/ja_JP.eucJP/books/handbook/install.html
          http://www.h4.dion.ne.jp/~katsuwo/index.html
      NetBSD
          http://www.jp.netbsd.org/ja/Releases/
      OpenBSD
          http://www.jp.openbsd.org/faq/faq4.html

>>3424 George
> $sock->close;
> としてソケットを閉じたほうがいいんじゃないでしょうか?
ごもっともです。修正しましたのでご確認ください。

> すべてのデータの転送が完了しスクリプトが終了するまで、
> 全ソケットが開きっぱなしになってしまうように思うのですが。
その通りですね。正確に言うと、
      スクリプトが終了するまでクライアント側は CLOSE_WAIT のまま、
      サーバ側は TIME_WAIT のままになってしまう
ですね。

…と思ったら、close しなくてもクライアントが FIN を送っている
場合もあるようです。
      http://x68000.startshop.co.jp/~68user/cgi-bin/cvsweb.cgi/public_html/net/sample/http-client-parallel.pl?rev=1.2
は close していないので、最後にまとめてクライアントが FIN を
送っているかと思ったのですが、途中で FIN を送っています (★ の部分)。
なぜだろう。

    # tethereal -n
    0.000000 192.168.1.11 -> 133.8.2.33 DNS Standard query A www.goo.ne.jp
    0.021875 133.8.2.33 -> 192.168.1.11 DNS Standard query response A 210.150.25.37
    0.022862 192.168.1.11 -> 210.150.25.37 TCP 1515 > 80 [SYN] Seq=1244798117 Ack=0 Win=57344 Len=0
    0.036368 210.150.25.37 -> 192.168.1.11 TCP 80 > 1515 [SYN, ACK] Seq=4071082836 Ack=1244798118 Win=5792 Len=0
    0.036411 192.168.1.11 -> 210.150.25.37 TCP 1515 > 80 [ACK] Seq=1244798118 Ack=4071082837 Win=57482 Len=0
    0.036763 192.168.1.11 -> 210.150.25.37 HTTP GET / HTTP/1.0
    0.037493 192.168.1.11 -> 133.8.2.33 DNS Standard query A www.yahoo.co.jp
    0.049007 210.150.25.37 -> 192.168.1.11 TCP 80 > 1515 [ACK] Seq=4071082837 Ack=1244798134 Win=5792 Len=0
    0.049052 192.168.1.11 -> 210.150.25.37 HTTP Continuation
    0.057874 133.8.2.33 -> 192.168.1.11 DNS Standard query response A 203.141.35.113 A 210.81.150.5 A 202.229.198.216
    0.058447 192.168.1.11 -> 203.141.35.113 TCP 1516 > 80 [SYN] Seq=830980655 Ack=0 Win=57344 Len=0
    0.061073 210.150.25.37 -> 192.168.1.11 TCP 80 > 1515 [ACK] Seq=4071082837 Ack=1244798160 Win=5792 Len=0
    0.088037 210.150.25.37 -> 192.168.1.11 HTTP HTTP/1.1 200 OK
    0.088665 210.150.25.37 -> 192.168.1.11 HTTP Continuation
    0.088688 192.168.1.11 -> 210.150.25.37 TCP 1515 > 80 [ACK] Seq=1244798160 Ack=4071085641 Win=54678 Len=0
    0.102552 210.150.25.37 -> 192.168.1.11 HTTP Continuation
    0.103180 210.150.25.37 -> 192.168.1.11 HTTP Continuation
    0.103199 192.168.1.11 -> 210.150.25.37 TCP 1515 > 80 [ACK] Seq=1244798160 Ack=4071088445 Win=51874 Len=0
    0.103815 210.150.25.37 -> 192.168.1.11 HTTP Continuation
    0.105548 203.141.35.113 -> 192.168.1.11 TCP 80 > 1516 [SYN, ACK] Seq=1395064875 Ack=830980656 Win=65535 Len=0
    0.105566 192.168.1.11 -> 203.141.35.113 TCP 1516 > 80 [ACK] Seq=830980656 Ack=1395064876 Win=57482 Len=0
    0.105937 192.168.1.11 -> 203.141.35.113 HTTP GET / HTTP/1.0
    0.106691 192.168.1.11 -> 133.8.2.33 DNS Standard query A www.asahi.com
    0.117698 210.150.25.37 -> 192.168.1.11 HTTP Continuation
    0.117743 192.168.1.11 -> 210.150.25.37 TCP 1515 > 80 [ACK] Seq=1244798160 Ack=4071091249 Win=49070 Len=0
    0.118337 210.150.25.37 -> 192.168.1.11 HTTP Continuation
    0.119744 210.150.25.37 -> 192.168.1.11 HTTP Continuation
    0.119759 192.168.1.11 -> 210.150.25.37 TCP 1515 > 80 [ACK] Seq=1244798160 Ack=4071094053 Win=46266 Len=0
    0.128571 133.8.2.33 -> 192.168.1.11 DNS Standard query response CNAME mf3.asahi.com A 210.173.168.48
    0.129171 192.168.1.11 -> 210.173.168.48 TCP 1517 > 80 [SYN] Seq=286646349 Ack=0 Win=57344 Len=0
    0.131878 210.150.25.37 -> 192.168.1.11 HTTP Continuation
    0.132505 210.150.25.37 -> 192.168.1.11 HTTP Continuation
    0.132524 192.168.1.11 -> 210.150.25.37 TCP 1515 > 80 [ACK] Seq=1244798160 Ack=4071096857 Win=43462 Len=0
    0.133124 210.150.25.37 -> 192.168.1.11 HTTP Continuation
    0.134528 210.150.25.37 -> 192.168.1.11 HTTP Continuation
    0.134543 192.168.1.11 -> 210.150.25.37 TCP 1515 > 80 [ACK] Seq=1244798160 Ack=4071099661 Win=40658 Len=0
    0.135144 210.150.25.37 -> 192.168.1.11 HTTP Continuation
    0.136529 210.150.25.37 -> 192.168.1.11 HTTP Continuation
    0.136550 192.168.1.11 -> 210.150.25.37 TCP 1515 > 80 [ACK] Seq=1244798160 Ack=4071102465 Win=37854 Len=0
    0.140743 210.173.168.48 -> 192.168.1.11 TCP 80 > 1517 [SYN, ACK] Seq=2302041965 Ack=286646350 Win=8767 Len=0
    0.140767 192.168.1.11 -> 210.173.168.48 TCP 1517 > 80 [ACK] Seq=286646350 Ack=2302041966 Win=57974 Len=0
    0.141054 192.168.1.11 -> 210.173.168.48 HTTP GET / HTTP/1.0
    0.141407 192.168.1.11 -> 210.150.25.37 TCP 1515 > 80 [ACK] Seq=1244798160 Ack=4071102465 Win=41950 Len=0
    0.143290 192.168.1.11 -> 210.150.25.37 TCP 1515 > 80 [ACK] Seq=1244798160 Ack=4071102465 Win=46046 Len=0
    0.143673 192.168.1.11 -> 210.150.25.37 TCP 1515 > 80 [ACK] Seq=1244798160 Ack=4071102465 Win=50142 Len=0
    0.143868 192.168.1.11 -> 210.150.25.37 TCP 1515 > 80 [ACK] Seq=1244798160 Ack=4071102465 Win=54238 Len=0
    0.144062 192.168.1.11 -> 210.150.25.37 TCP 1515 > 80 [ACK] Seq=1244798160 Ack=4071102465 Win=57482 Len=0
    0.147471 210.150.25.37 -> 192.168.1.11 HTTP Continuation
    0.148088 210.150.25.37 -> 192.168.1.11 HTTP Continuation
    0.148139 192.168.1.11 -> 210.150.25.37 TCP 1515 > 80 [ACK] Seq=1244798160 Ack=4071105269 Win=56080 Len=0
    0.148713 210.150.25.37 -> 192.168.1.11 HTTP Continuation
    0.148817 192.168.1.11 -> 210.150.25.37 TCP 1515 > 80 [ACK] Seq=1244798160 Ack=4071106671 Win=57482 Len=0
    0.150165 210.150.25.37 -> 192.168.1.11 HTTP Continuation
    0.151563 210.150.25.37 -> 192.168.1.11 HTTP Continuation
    0.151615 192.168.1.11 -> 210.150.25.37 TCP 1515 > 80 [ACK] Seq=1244798160 Ack=4071109475 Win=56080 Len=0
    0.152194 210.150.25.37 -> 192.168.1.11 HTTP Continuation
    0.153553 210.150.25.37 -> 192.168.1.11 HTTP Continuation
    0.153603 192.168.1.11 -> 210.150.25.37 TCP 1515 > 80 [ACK] Seq=1244798160 Ack=4071112044 Win=54913 Len=0
    0.154219 210.150.25.37 -> 192.168.1.11 HTTP Continuation
    0.155605 210.150.25.37 -> 192.168.1.11 HTTP Continuation
    0.155627 192.168.1.11 -> 210.150.25.37 TCP 1515 > 80 [ACK] Seq=1244798160 Ack=4071114848 Win=52109 Len=0
    0.155939 210.173.168.48 -> 192.168.1.11 TCP 80 > 1517 [ACK] Seq=2302041966 Ack=286646366 Win=33221 Len=0
    0.155970 192.168.1.11 -> 210.173.168.48 HTTP Continuation
    0.158143 192.168.1.11 -> 210.150.25.37 TCP 1515 > 80 [ACK] Seq=1244798160 Ack=4071114848 Win=56205 Len=0
    0.164042 210.150.25.37 -> 192.168.1.11 HTTP Continuation
    0.164676 210.150.25.37 -> 192.168.1.11 HTTP Continuation
    0.164701 192.168.1.11 -> 210.150.25.37 TCP 1515 > 80 [ACK] Seq=1244798160 Ack=4071117652 Win=56080 Len=0
    0.165306 210.150.25.37 -> 192.168.1.11 HTTP Continuation
    0.165407 192.168.1.11 -> 210.150.25.37 TCP 1515 > 80 [ACK] Seq=1244798160 Ack=4071119054 Win=57482 Len=0
    0.166710 210.150.25.37 -> 192.168.1.11 HTTP Continuation
    0.168113 210.150.25.37 -> 192.168.1.11 HTTP Continuation
    0.168134 192.168.1.11 -> 210.150.25.37 TCP 1515 > 80 [ACK] Seq=1244798160 Ack=4071121858 Win=56080 Len=0
    0.168750 210.150.25.37 -> 192.168.1.11 HTTP Continuation
    0.168851 192.168.1.11 -> 210.150.25.37 TCP 1515 > 80 [ACK] Seq=1244798160 Ack=4071123260 Win=57482 Len=0
    0.170143 210.150.25.37 -> 192.168.1.11 HTTP Continuation
    0.171551 210.150.25.37 -> 192.168.1.11 HTTP Continuation
    0.171596 192.168.1.11 -> 210.150.25.37 TCP 1515 > 80 [ACK] Seq=1244798160 Ack=4071126064 Win=56080 Len=0
    0.171881 210.173.168.48 -> 192.168.1.11 TCP 80 > 1517 [ACK] Seq=2302041966 Ack=286646392 Win=33229 Len=0
    0.173514 210.150.25.37 -> 192.168.1.11 HTTP Continuation
    0.173630 192.168.1.11 -> 210.150.25.37 TCP 1515 > 80 [ACK] Seq=1244798160 Ack=4071127466 Win=57482 Len=0
    0.174146 210.150.25.37 -> 192.168.1.11 HTTP Continuation
    0.175384 210.150.25.37 -> 192.168.1.11 HTTP Continuation
    0.175412 192.168.1.11 -> 210.150.25.37 TCP 1515 > 80 [ACK] Seq=1244798160 Ack=4071129502 Win=56848 Len=0
    0.175904 210.173.168.48 -> 192.168.1.11 HTTP HTTP/1.1 200 OK
    0.177488 210.150.25.37 -> 192.168.1.11 HTTP Continuation
    0.178123 210.150.25.37 -> 192.168.1.11 HTTP Continuation
    0.178173 192.168.1.11 -> 210.150.25.37 TCP 1515 > 80 [ACK] Seq=1244798160 Ack=4071132306 Win=56080 Len=0
    0.178749 210.150.25.37 -> 192.168.1.11 HTTP Continuation
    0.178853 192.168.1.11 -> 210.150.25.37 TCP 1515 > 80 [ACK] Seq=1244798160 Ack=4071133708 Win=57482 Len=0
    0.180158 210.150.25.37 -> 192.168.1.11 HTTP Continuation
    0.181557 210.150.25.37 -> 192.168.1.11 HTTP Continuation
    0.181610 192.168.1.11 -> 210.150.25.37 TCP 1515 > 80 [ACK] Seq=1244798160 Ack=4071136512 Win=56080 Len=0
    0.182194 210.150.25.37 -> 192.168.1.11 HTTP Continuation
    0.182321 192.168.1.11 -> 210.150.25.37 TCP 1515 > 80 [ACK] Seq=1244798160 Ack=4071137914 Win=57482 Len=0
    0.183582 210.150.25.37 -> 192.168.1.11 HTTP Continuation
    0.184982 210.150.25.37 -> 192.168.1.11 HTTP Continuation
    0.185024 192.168.1.11 -> 210.150.25.37 TCP 1515 > 80 [ACK] Seq=1244798160 Ack=4071140718 Win=54678 Len=0
    0.185560 210.150.25.37 -> 192.168.1.11 HTTP Continuation
    0.185590 192.168.1.11 -> 210.150.25.37 TCP 1515 > 80 [ACK] Seq=1244798160 Ack=4071141836 Win=53561 Len=0
    0.187683 192.168.1.11 -> 210.150.25.37 TCP 1515 > 80 [ACK] Seq=1244798160 Ack=4071141836 Win=57482 Len=0
    0.250874 203.141.35.113 -> 192.168.1.11 TCP 80 > 1516 [ACK] Seq=1395064876 Ack=830980672 Win=32939 Len=0
    0.250973 192.168.1.11 -> 203.141.35.113 HTTP Continuation
    0.269692 192.168.1.11 -> 210.173.168.48 TCP 1517 > 80 [ACK] Seq=286646392 Ack=2302042221 Win=57974 Len=0
    0.282256 210.173.168.48 -> 192.168.1.11 HTTP Continuation
    0.282646 192.168.1.11 -> 210.150.25.37 TCP 1515 > 80 [FIN, ACK] Seq=1244798160 Ack=4071141836 Win=57482 Len=0 ★
    0.282841 210.173.168.48 -> 192.168.1.11 HTTP Continuation
    0.282862 192.168.1.11 -> 210.173.168.48 TCP 1517 > 80 [ACK] Seq=286646392 Ack=2302045049 Win=56560 Len=0
    0.296511 210.173.168.48 -> 192.168.1.11 HTTP Continuation
    0.296865 192.168.1.11 -> 210.173.168.48 TCP 1517 > 80 [ACK] Seq=286646392 Ack=2302046463 Win=57974 Len=0
    0.297081 210.173.168.48 -> 192.168.1.11 HTTP Continuation
    0.297650 210.173.168.48 -> 192.168.1.11 HTTP Continuation
    0.297676 192.168.1.11 -> 210.173.168.48 TCP 1517 > 80 [ACK] Seq=286646392 Ack=2302049291 Win=55146 Len=0
    0.298737 210.150.25.37 -> 192.168.1.11 TCP 80 > 1515 [ACK] Seq=4071141836 Ack=1244798161 Win=5792 Len=0
    0.300072 192.168.1.11 -> 210.173.168.48 TCP 1517 > 80 [ACK] Seq=286646392 Ack=2302049291 Win=57974 Len=0
    0.304631 203.141.35.113 -> 192.168.1.11 HTTP HTTP/1.1 200 OK
    0.305360 203.141.35.113 -> 192.168.1.11 HTTP Continuation
    0.305414 192.168.1.11 -> 203.141.35.113 TCP 1516 > 80 [ACK] Seq=830980700 Ack=1395067680 Win=56080 Len=0
    0.306088 203.141.35.113 -> 192.168.1.11 HTTP Continuation
    0.306190 192.168.1.11 -> 203.141.35.113 TCP 1516 > 80 [ACK] Seq=830980700 Ack=1395069082 Win=57482 Len=0
    0.310105 210.173.168.48 -> 192.168.1.11 HTTP Continuation
    0.310686 210.173.168.48 -> 192.168.1.11 HTTP Continuation
    0.310712 192.168.1.11 -> 210.173.168.48 TCP 1517 > 80 [ACK] Seq=286646392 Ack=2302052119 Win=56560 Len=0
    0.312365 210.173.168.48 -> 192.168.1.11 HTTP Continuation
    0.312466 192.168.1.11 -> 210.173.168.48 TCP 1517 > 80 [ACK] Seq=286646392 Ack=2302053533 Win=57974 Len=0
    0.312940 210.173.168.48 -> 192.168.1.11 HTTP Continuation
    0.314229 210.173.168.48 -> 192.168.1.11 HTTP Continuation
    0.314250 192.168.1.11 -> 210.173.168.48 TCP 1517 > 80 [ACK] Seq=286646392 Ack=2302056361 Win=56560 Len=0
    0.323278 210.173.168.48 -> 192.168.1.11 HTTP Continuation
    0.323656 192.168.1.11 -> 210.173.168.48 TCP 1517 > 80 [ACK] Seq=286646392 Ack=2302057775 Win=57974 Len=0
    0.323846 210.173.168.48 -> 192.168.1.11 HTTP Continuation
    0.324419 210.173.168.48 -> 192.168.1.11 HTTP Continuation
    0.324446 192.168.1.11 -> 210.173.168.48 TCP 1517 > 80 [ACK] Seq=286646392 Ack=2302060603 Win=56560 Len=0
    0.325721 210.173.168.48 -> 192.168.1.11 HTTP Continuation
    0.325821 192.168.1.11 -> 210.173.168.48 TCP 1517 > 80 [ACK] Seq=286646392 Ack=2302062017 Win=57974 Len=0
    0.327029 210.173.168.48 -> 192.168.1.11 HTTP Continuation
    0.328325 210.173.168.48 -> 192.168.1.11 HTTP Continuation
    0.328347 192.168.1.11 -> 210.173.168.48 TCP 1517 > 80 [ACK] Seq=286646392 Ack=2302064845 Win=56560 Len=0
    0.328904 210.173.168.48 -> 192.168.1.11 HTTP Continuation
    0.330194 210.173.168.48 -> 192.168.1.11 HTTP Continuation
    0.330221 192.168.1.11 -> 210.173.168.48 TCP 1517 > 80 [ACK] Seq=286646392 Ack=2302067673 Win=53732 Len=0
    0.332620 192.168.1.11 -> 210.173.168.48 TCP 1517 > 80 [ACK] Seq=286646392 Ack=2302067673 Win=57828 Len=0
    0.337018 210.173.168.48 -> 192.168.1.11 HTTP Continuation
    0.337585 210.173.168.48 -> 192.168.1.11 HTTP Continuation
    0.337636 192.168.1.11 -> 210.173.168.48 TCP 1517 > 80 [ACK] Seq=286646392 Ack=2302070501 Win=56560 Len=0
    0.338157 210.173.168.48 -> 192.168.1.11 HTTP Continuation
    0.338260 192.168.1.11 -> 210.173.168.48 TCP 1517 > 80 [ACK] Seq=286646392 Ack=2302071915 Win=57974 Len=0
    0.339466 210.173.168.48 -> 192.168.1.11 HTTP Continuation
    0.340760 210.173.168.48 -> 192.168.1.11 HTTP Continuation
    0.340783 192.168.1.11 -> 210.173.168.48 TCP 1517 > 80 [ACK] Seq=286646392 Ack=2302074743 Win=56560 Len=0
    0.341338 210.173.168.48 -> 192.168.1.11 HTTP Continuation
    0.341437 192.168.1.11 -> 210.173.168.48 TCP 1517 > 80 [ACK] Seq=286646392 Ack=2302076157 Win=57974 Len=0
    0.342637 210.173.168.48 -> 192.168.1.11 HTTP Continuation
    0.343937 210.173.168.48 -> 192.168.1.11 HTTP Continuation
    0.343958 192.168.1.11 -> 210.173.168.48 TCP 1517 > 80 [ACK] Seq=286646392 Ack=2302078985 Win=56560 Len=0
    0.344512 210.173.168.48 -> 192.168.1.11 HTTP Continuation
    0.344613 192.168.1.11 -> 210.173.168.48 TCP 1517 > 80 [ACK] Seq=286646392 Ack=2302080399 Win=57974 Len=0
    0.345803 210.173.168.48 -> 192.168.1.11 HTTP Continuation
    0.347099 210.173.168.48 -> 192.168.1.11 HTTP Continuation
    0.347121 192.168.1.11 -> 210.173.168.48 TCP 1517 > 80 [ACK] Seq=286646392 Ack=2302083227 Win=56560 Len=0
    0.347680 210.173.168.48 -> 192.168.1.11 HTTP Continuation
    0.347795 192.168.1.11 -> 210.173.168.48 TCP 1517 > 80 [ACK] Seq=286646392 Ack=2302084641 Win=57974 Len=0
    0.348975 210.173.168.48 -> 192.168.1.11 HTTP Continuation
    0.350554 210.173.168.48 -> 192.168.1.11 HTTP Continuation
    0.350609 192.168.1.11 -> 210.173.168.48 TCP 1517 > 80 [ACK] Seq=286646392 Ack=2302087469 Win=56560 Len=0
    0.351108 210.173.168.48 -> 192.168.1.11 HTTP Continuation
    0.351146 192.168.1.11 -> 210.173.168.48 TCP 1517 > 80 [ACK] Seq=286646392 Ack=2302088699 Win=56745 Len=0
    0.352602 203.141.35.113 -> 192.168.1.11 HTTP Continuation
    0.354088 203.141.35.113 -> 192.168.1.11 HTTP Continuation
    0.354145 192.168.1.11 -> 203.141.35.113 TCP 1516 > 80 [ACK] Seq=830980700 Ack=1395071886 Win=56080 Len=0
    0.354811 203.141.35.113 -> 192.168.1.11 HTTP Continuation
    0.354939 192.168.1.11 -> 203.141.35.113 TCP 1516 > 80 [ACK] Seq=830980700 Ack=1395073288 Win=57482 Len=0
    0.356410 203.141.35.113 -> 192.168.1.11 HTTP Continuation
    0.358002 203.141.35.113 -> 192.168.1.11 HTTP Continuation
    0.358059 192.168.1.11 -> 203.141.35.113 TCP 1516 > 80 [ACK] Seq=830980700 Ack=1395076092 Win=54678 Len=0
    0.360242 192.168.1.11 -> 203.141.35.113 TCP 1516 > 80 [ACK] Seq=830980700 Ack=1395076092 Win=57482 Len=0
    0.399452 203.141.35.113 -> 192.168.1.11 HTTP Continuation
    0.400187 203.141.35.113 -> 192.168.1.11 HTTP Continuation
    0.400233 192.168.1.11 -> 203.141.35.113 TCP 1516 > 80 [ACK] Seq=830980700 Ack=1395078896 Win=56080 Len=0
    0.400937 203.141.35.113 -> 192.168.1.11 HTTP Continuation
    0.401824 192.168.1.11 -> 203.141.35.113 TCP 1516 > 80 [ACK] Seq=830980700 Ack=1395080298 Win=57482 Len=0
    0.402549 203.141.35.113 -> 192.168.1.11 HTTP Continuation
    0.404149 203.141.35.113 -> 192.168.1.11 HTTP Continuation
    0.404191 192.168.1.11 -> 203.141.35.113 TCP 1516 > 80 [ACK] Seq=830980700 Ack=1395083102 Win=54678 Len=0
    0.404891 203.141.35.113 -> 192.168.1.11 HTTP Continuation
    0.406482 203.141.35.113 -> 192.168.1.11 HTTP Continuation
    0.406498 192.168.1.11 -> 203.141.35.113 TCP 1516 > 80 [ACK] Seq=830980700 Ack=1395085906 Win=51874 Len=0
    0.407229 203.141.35.113 -> 192.168.1.11 HTTP Continuation
    0.413462 192.168.1.11 -> 203.141.35.113 TCP 1516 > 80 [ACK] Seq=830980700 Ack=1395087308 Win=54568 Len=0
    0.425540 192.168.1.11 -> 203.141.35.113 TCP 1516 > 80 [ACK] Seq=830980700 Ack=1395087308 Win=57482 Len=0
    0.448696 203.141.35.113 -> 192.168.1.11 HTTP Continuation
    0.449436 203.141.35.113 -> 192.168.1.11 HTTP Continuation
    0.449485 192.168.1.11 -> 203.141.35.113 TCP 1516 > 80 [ACK] Seq=830980700 Ack=1395090112 Win=56080 Len=0
    0.450211 203.141.35.113 -> 192.168.1.11 HTTP Continuation
    0.450826 192.168.1.11 -> 203.141.35.113 TCP 1516 > 80 [ACK] Seq=830980700 Ack=1395091514 Win=57482 Len=0
    0.451828 203.141.35.113 -> 192.168.1.11 HTTP Continuation
    0.453227 203.141.35.113 -> 192.168.1.11 HTTP Continuation
    0.453277 192.168.1.11 -> 203.141.35.113 TCP 1516 > 80 [ACK] Seq=830980700 Ack=1395093266 Win=55731 Len=0
    0.486867 192.168.1.11 -> 203.141.35.113 TCP 1516 > 80 [FIN, ACK] Seq=830980700 Ack=1395093266 Win=57482 Len=0
    0.486941 192.168.1.11 -> 210.173.168.48 TCP 1517 > 80 [FIN, ACK] Seq=286646392 Ack=2302088699 Win=57974 Len=0
    0.498176 210.173.168.48 -> 192.168.1.11 TCP 80 > 1517 [ACK] Seq=2302088699 Ack=286646393 Win=33229 Len=0
    0.536535 203.141.35.113 -> 192.168.1.11 TCP 80 > 1516 [ACK] Seq=1395093266 Ack=830980701 Win=32947 Len=0


# www.goo.ne.jp (210.150.25.37)
# www.yahoo.co.jp (203.141.35.113)
# www.asahi.com (210.173.168.48)

# FreeBSD 4.9-RELEASE + Perl 5.005_03

No. 3426 # 68user 2003/11/26 (水) 09:28:23
>>3425 68user
> なぜだろう。
あーそうか。$sock がどこからも参照されなくなったので、
perl がガベージコレクトして、デストラクタが close して
いるんですね。

No. 3427 # Mule 2003/12/01 (月) 23:34:08
こんにちは。
初めて書き込みいたします。
私は、CGIの使えないサイトで、ちょっとしたプロフのページを管理しています。
このサイトでは、自作CGIは一切使えず、既成のCGIを使うしかないのですが、最近、BBSのほうにおかしな書き込みが増えて困っています。
そこで、アクセス元のログを取ろうと考えまして、自作CGIを書きましたがここで問題が生じました。
おわかりかと思いますが、自作CGIを直接設置できないことが問題です。

ただ、このサイトでは、外部から一枚だけ、画像をリンクして表示できるんですね。

そこで、画像の参照元である手持ちのサーバの.htaccessをいじり、
画像がCGIとして機能するように設定しました。
それで、このCGIファイルを画像のように偽装してサイトにアップロードしました。
これによって、外部CGIを呼び出してログを保存することが出来ましたが、私の考えで言えば、いまどき、

print map {"$_ = $ENV{$_}"} keys %ENV;

で表示されるデータなど、あまりあてにはできない...
できれば、もっと確実なところで、匿名Proxy経由であれば、telnetを起動して接続元をファイルに保存、などの手法をとりたいのです。

ところが、画像のトリガーを使った方式ではこれが上手くいきません。
ヘッダの出し方に問題があるはずですが、なんとかならないものでしょうか?

パワーユーザーの皆様、良い知恵がございましたらご教授ください。
宜しくお願いいたします<m(__)m>

No. 3428 # perler 2003/12/01 (月) 23:42:05
はじめまして^^
ネットワーク関連のプログラムいつも参考にさせていただいております。
今回ちょっとおききしたいことがありまして書き込ませていただきます。
内容がこちらのページの趣旨と離れて申し訳ないのですが、
お返事いただければ幸いです。

いきなり本題にはいらせていただきます。

<a href="$ENV{'SCRIPT_NAME'}?para=data">
としてリンクを作成して、その先のページで
<form action="$ENV{'SCRIPT_NAME'}?para2=data2" method='POST'>
とします。
このときフォームデータの取り込みのハッシュを%FORMとしたとき
2つめの$FORM{'para2'}が存在しません。

これがなぜおこるのかさっぱりわかりません。
またメソッドをGETでも試しましたがダメでした。
ただし、出力先のURLにはhttp://***.cgi?para2=data2と表示されます。でもprint文では表示されないのです。
原因がわかれば教えていただけないでしょうか?

ちなみにperl5でapache1.3.14仕様です。
よろしくおねがいします;;

No. 3429 # 68user 2003/12/02 (火) 12:32:36
>>3427 Mule
試してませんが、画像側で
      Location: telnet://example.com:1234
ではダメですか? (ダメなような気もしますが)

掲示板側では img src でしか外部リソースを呼び出せない、
という条件のもとでは、これ以外の方法は思いつきません
でした。

>>3428 perler
誰かが環境変数 %ENV を解析し、その結果を %FORM に
セットしなければならないわけですが、その部分はどこが
担当していますか? (CGI モジュールですか?)

No. 3430 # Mule 2003/12/02 (火) 19:52:37
>>3429 68user

ご返事ありがとうございます。

Locationは私も考えましたが、その方法は無理でした。
しかし、コマンドで上手く行きそうです。
現在、実験中ですので、詳細はまたご報告いたします。
とりあえず、今日はご報告まで。

お忙しい中、返事をいただきましてありがとうございました。

No. 3431 # 68user 2003/12/03 (水) 00:17:26
>>3430 Mule
できそうですか。ぜひ結果を教えてください。

No. 3432 # 初心者 2003/12/03 (水) 10:06:09
初歩的な質問で、申し訳ないのですが、教えていただけると助かります。
  
Bシェルでは、
if [$a = $b]
then
echo "ok!"
fi
  
などと、if文の中で、変数同士の値を比較してイコールならば、とかけますが、
  
Cシェルでは出来ないのでしょうか?

No. 3433 # csh 2003/12/03 (水) 11:32:05
通りすがりですが、

#!/bin/csh

set a = 2;
set b = 2;

if(a == b) then
        echo "a = b"
else if(a < b) then
        echo "a < b"
else
        echo "a > b"
endif

で良かったと思います。

No. 3434 # 初心者 2003/12/03 (水) 15:34:16
cshさん書き込みありがとうございます

実は、変数には、どの値が入ってくるか、分からないのです。
例えば、
ps -o user,pid,ppid,comm -A | grep -i $1 | grep -v grep > lis.txt
set cmd1=(`awk '{print $2}' lis.txt`)
set cmd2=(`awk '{print $3}' lis.txt`)
@ cnt1=0
@ cnt2=0
foreach pid1 ( $cmd1 )
    @ cnt1++
    foreach ppid1 ( $cmd2 )
    @ cnt2++
    if ( $pid1 と$ppid1に入った値がイコールならば ) then
echo 'zero!!'
            echo $pid1 $ppid1 >> procs1.txt
.......

                    end
end


。。。。。。みたいに。その、かっこの中を、どう書いてもエラーが出るんです。基本的なミスなのか、それともcでは出来ないのか、、、分からなくて。
if ($a==1) thenはOKでも、($a==$b)、はだめでした。

赤色の文字は 「Windows 機種依存文字」か、いわゆる「半角カナ」です。 この掲示板では自動変換されますが、今後は使用しないで下さい

No. 3435 # 初心者 2003/12/03 (水) 15:35:15
あ、すみません。。。。半角カナ。

No. 3436 # 通りすがり 2003/12/03 (水) 16:06:26
>>3434 初心者
HP-UX11.0の環境で確認しましたが「==」で問題無く一致を検知できました。
「==」の前後に空白が無いと上記OSでは文法上のエラーになりました。
ご参考になれば。

No. 3437 # perler 2003/12/03 (水) 17:13:59
>3429
お早いお返事ありがとうございました。
質問の答えなのですが、同プログラム内で%FORMによみこんでおります。

sub func
{
my($query,$pair);

if($ENV{'REQUEST_METHOD'} eq 'POST'){
          read(STDIN,$query,$ENV{'CONTENT_LENGTH'};
}else{$query=$ENV{'QUERY_STRING'};}

foreach $pair (split/&/,$query){
          ($key,$value)=split(/=/,$pair);

#デコード処理

          $FORM{$key}=$value;
}

このサブルーチンで処理させております。

ちなみにただのメールフォームではなにも問題なく動作します。

No. 3438 # 超初心者 2003/12/03 (水) 17:45:24
BSD UNIX 類のどれか欲しいんですけどお勧めはありますか?

No. 3439 # 68user 2003/12/03 (水) 18:44:01
>>3437 perler
> <form action="$ENV{'SCRIPT_NAME'}?para2=data2" method='POST'>
という書き方をした場合、メソッドは POST ですが para2=data2 は
環境変数 QUERY_STRING 経由で渡されます。よって、
      POST なら標準入力から読む
というやり方では、QUERY_STRING からの入力は無視されてしまいます。

>>3438 超初心者
初心者ということであれば、FreeBSD 4.9-RELEASE がお勧めです。
      http://www.h4.dion.ne.jp/~katsuwo/index.html

No. 3440 # zsh 2003/12/03 (水) 19:08:10
>>3434 初心者
シェルの一行目を
#/bin/csh -x
に変更して再実行すれば
実際に変数に何が入ってくるか確認できますよ。

No. 3441 # 初心者 2003/12/04 (木) 10:15:13
No. 3436 の通りすがりさん、No. 3440 zshさん、 書き込みありがとうございます
  私の環境が違うのかも知れません。下記のように表示されてるので。
Digital UNIX V4.0B (Rev. 564
Digital UNIX Japanese Support V4.0A (rev. 3.1)


で、やっぱりおっしゃるとおり実行したのだけど、だめなんです。
if ( $a == $b )
の、右辺の変数名が、分かりません、とかそう言うエラーが出るので、

結局
@ df=$a - $b
if ($df == 0 )
で、何とかうまくいきました。

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

No. 3442 # Mule 2003/12/04 (木) 16:54:25
>>3431 68user

こんにちは、Muleです。
すみません、コマンドでtelnet起動、失敗しました(^^;
これが出来たら、結構使えるスクリプトになるかもと思っていたのですが、やはり無理がありますかね...

コード全体の流れとしては、
プロキシのチェックルーチンをよび、flagが立っていればif分岐、という典型的な処理です。

if($flag){

#telnetを起動し、接続元をファイルに記録する処理

}
else{
my $img = 'file.gif';
my $byte = (stat $img)[7];

print "Content-Type: image/gif\n";
print "Content-Length: $byte\n\n";

open IMG,$img;
binmode((binmode(IMG),$|=1)[0]);

print map {$_} <IMG>;

close IMG;

}

やはり、イメージで呼び出すという方式では、FTPで、というのが、現実的でしょうか?

socketと組み合わせれば、なんとかなりそうな気がしていろいろ試してみましたが...上手く行かないものですね。

No. 3443 # 68user 2003/12/04 (木) 19:08:33
>>3442 Mule
わたしは
      http は proxy 経由かもしれないが、ftp や telnet は
      proxy 経由でないことを期待して、クライアント側から
      ftp や telnet でサーバに接続させるように仕向けて、
      IP アドレスを取得する
と思っていたのですが、そうではないようですね。

> コード全体の流れとしては、プロキシのチェックルーチンをよび、
> flagが立っていればif分岐、という典型的な処理です。
「proxy のチェック」というのは公開 proxy サーバかどうかを
調べるため、クライアントの IP アドレスに接続してみる、という
ことですよね。

telnet で接続、というのは
      http://x68000.startshop.co.jp/~68user/unix/pickup?sleep
てな方法でできます。もちろん代わりに Socket を使ってもいいです。
方法はともかく、公開 proxy かどうかの判断はやろうと思えばできます。

で、なぜ
      if($flag){
            #telnetを起動し、接続元をファイルに記録する処理
      }
と proxy チェックルーチンを呼んだ後 ($flag が確定した後) に
もう一度 telnet を実行する必要があるのでしょうか?

      #telnet を起動し、クライアントの IP アドレスに接続。
      #接続できたら $flag=1;

      if($flag){
            #接続元をファイルに記録する処理
            open(LOG, ">log");
            print LOG "$ENV{REMOTE_ADDR} is open proxy\n";
            close(LOG);
      }

とすればよいのではないですか?

No. 3444 # perler 2003/12/04 (木) 20:09:43
>>3439 68user
お返事ありがとうございました。
なるほど、それがperlの仕様なんですね^^
原因がわかりました。

実は
<form action="$ENV{'SCRIPT_NAME'}?para2=data2 method='POST'>
<input type="hidden" name="mode" value="res">
<input type="submit" value="返信">
</form>
とやっていたためPOSTとGETが混在してしまっていたようでした。
この形ではPOSTをGETにかえても成功しませんでした。

管理人さんの助言でこれに気づくことができました。
どうもありがとうございました。

結果だけお伝えしておきます。

method='POST'の場合
          http://xxx.cgi?para2=data2となりmode=resがおくられない。

method='GET'の場合
          http://xxx.cgi?mode=resとなりpara2=data2がおくられない。
でした。

No. 3445 # 68user 2003/12/04 (木) 20:48:29
>>3444 perler
> なるほど、それがperlの仕様なんですね^^
perl とは関係ないです。これは HTML と CGI の領域です。

apache-1.3.29・IE6・Mozilla-1.5 で試した結果、
> method='GET'の場合
> http://xxx.cgi?mode=resとなりpara2=data2がおくられない。
これは正しいです。正確に言うと
    「ブラウザが para2=data2 を送らない」
です。

> method='POST'の場合
> http://xxx.cgi?para2=data2となりmode=resがおくられない。
これは間違いです。標準入力を解析していないだけ、でしょう。


以下の CGI スクリプトを実行し、GET と POST それぞれで
QUERY_STRING と標準入力にどういう値が入っているか確認
してください。

-------
#!/usr/local/bin/perl

print "Content-type: text/html\n\n";

$script_name = $0;
$script_name =~ s|.*/||;

print <<END;
<html><body>
<form action="$script_name?para2=data2" method='GET'>
<input type="hidden" name="mode" value="res">
<input type="submit" value="GET">
</form>
<form action="$script_name?para2=data2" method='POST'>
<input type="hidden" name="mode" value="res">
<input type="submit" value="POST">
</form>
END

print "REQUEST_METHOD=$ENV{REQUEST_METHOD}<br>\n";
print "QUERY_STRING=$ENV{QUERY_STRING}<br>\n";
print "STDIN=\n";
print <STDIN>;

No. 3446 # perler 2003/12/05 (金) 00:22:19
>>3445 68user
お返事ありがとうございました。

なるほど、標準入力を解析しないということがわかりました。
パラメーターを指定しているのにPOSTをつかったのがいけなかったようですね。

またGETをつかってもパラメーターを送らないので素直に違う方法を考えます。

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

No. 3447 # Mule 2003/12/05 (金) 16:43:47
>>3443 68user

こんにちは、Muleです。
ご返事、ありがとうございます。

中途半端なコードを書いたせいか、誤解があったようですが、わたしも68user様が言われた、
    
>http は proxy 経由かもしれないが、ftp や telnet は
>proxy 経由でないことを期待して、クライアント側から
>ftp や telnet でサーバに接続させるように仕向けて、
>IP アドレスを取得する

という、まさにそのことを考えております。

proxyのルーチンは、proxy経由かどうかを最初にチェックする為のもので、
httpからのアクセスがproxy経由でなければ、画像を出力し普通に接続元を記録する。
そうでなければ、クライアント側からtelnetでサーバに接続させて、接続元を記録する、という流れです。
FTPと書いたのは、わたしのほうで、FTPを用意し、CGIから出力する画像の参照元に、FTPサーバにある画像を指定して出力させれば、FTPのログに元の接続先が残るのではないかと思うからです。

考え方として、何か大きな間違いをおかしているでしょうか?
ご指摘いただければ、幸いです。

No. 3448 # 68user 2003/12/05 (金) 22:43:43
>>3447 Mule
> そうでなければ、クライアント側からtelnetでサーバに接続させて、
> 接続元を記録する、という流れです。
なるほど。つまり、
>>3442 Mule
のサンプルは、
      接続元 IP アドレスに接続 [*1]
      if ( 接続成功 ){
          クライアント側が telnet でサーバに接続してくるような
          出力を行なう (例えば Location とか)。[*2]
      } else {
          画像を表示
      }
ということですね? もしそうなら納得です。

ただ、*1 の部分は可能ですが、*2 の部分はよほどセキュリティが
甘いブラウザでないと無理なのではないか、と思います。

No. 3449 # Mule 2003/12/06 (土) 00:11:10
>>3448 68user

さっそくのご返事、感謝いたします。

私が考えているのは、68user様のひながたに沿って考えると、最初にtelnetを起動するというのではないです。

たとえば、こんな感じになると思います。

            
            use CGI qw(:standard);
            
            $addr = remote_addr;
            $host = remote_host;
            $host = gethostbyaddr(pack("C4",split /\./,$addr),2) if($host eq '' || $host eq $addr);

            unless($host){
                    クライアント側が telnet でサーバに接続してくるような
                    出力を行なう (例えば Location とか)。
            } else {
                    画像を表示
            }
です。


素朴に疑問なのですが、最初にtelnetを起動して、接続元に接続できるかどうかの判定を行わなければ、理屈的に無理なのでしょうか?

私は、proxy経由のアクセスがあった時にのみ、if文を実行させたいと思うのですが...

No. 3450 # 68user 2003/12/06 (土) 05:31:08
>>3449 Mule
> $host = gethostbyaddr(pack("C4",split /\./,$addr),2) if($host eq '' || $host eq $addr);
逆引きに成功したら (つまりクライアントが FQDN を持って
いたら) proxy 経由でない、逆引きに失敗したら proxy 経由
という判定方法ですね。

これは proxy 判定にはなっていません。なぜなら技術的には、
      「FQDN を持つかどうかと proxy サーバであるかどうか」
は関係がないからです。

後は統計的に
      「proxy サーバは FQDN を持たないケースが多い」
と言えるかどうかですが、特にそういうこともないと思います。
むしろわたしは
      「proxy サーバは FQDN を持つ可能性が高い」
と思います。

> 素朴に疑問なのですが、最初にtelnetを起動して、接続元に
> 接続できるかどうかの判定を行わなければ、理屈的に無理
> なのでしょうか?
理屈的には、100% の精度の proxy 判定は不可能です。
ただ、完璧でなくていいなら、以下のような策はあります。

    1. proxy 特有のヘッダ、例えば以下のようなものが設定されて
          いるか調べる。
              HTTP_PROXY_CONNECTION
              HTTP_SP_HOST
              HTTP_VIA
              HTTP_X_FORWARDED_FOR

          http://taruo.net/e/ などで判定しているのはコレでしょう。
          http://www2s.biglobe.ne.jp/~cru/library/lq/index.html でも
          同様の判定を行っているようです。

          ただし、proxy サーバの管理者が適切に設定すれば、これらの
          ヘッダを渡さないようにすることは可能です。

    2. クライアント側の適当なポートに接続し、公開 proxy か
          どうか (誰でも接続できる proxy かどうか) 判断する。
          例えば 2ch ではこれをやっているんでしょう。
                http://info.2ch.net/guide/faq.html#F5

          ただし、以下のような欠点があります。
              - どのポート番号に接続するかは適当に決めなければならない。
                  全ポートをポートスキャンしていると時間がかかる。
              - あくまで「公開 proxy」かどうかの判定にしか使えない。
                  (世の中の proxy の大多数を占める) 特定のネットワーク内から
                  のみ使用可能な proxy は判定できない。
              - ポートスキャンは反社会的。やりすぎると相手からクレームを
                  付けられる可能性が高い。

    3. telnet・Java Applet などで直接接続させるよう仕向ける。
          詳しくは以下のサイトをどうぞ。
              http://akademeia.info/main/lecture3/tokubetu_IP_nuki.htm
              http://www.nurs.or.jp/~telnet/tips.html
                「telnetプロトコルによるIP抜き」

          ただしこれも反社会的です。いきなりこれをやられたら、
          わたしならそのサイトには二度と行きません。

普通は 1 でやめておくのがいいでしょう。2・3 は真面目な
ページでやるには過激すぎると思います。

No. 3451 # perler 2003/12/06 (土) 06:03:53
質問ではないんで、邪魔だったら消してくださいね。

過去ログを時間が許すままに読んじゃいました。
とってもおもしろかったです^^
まだまだいっぱい残っているので読破しようとおもいます。

言語はたくさん覚えたけど、UNIXには触ったことがないというある意味
希少なプログラマーなのでちょっとわからないこともあるんですけど、
予想するのが楽しいです。

最近のログをみていると応援の書き込みが少なかったので「管理がんばってください」の意味をこめてかきこませていただきました。
お目汚し失礼いたしました。

No. 3452 # Mule 2003/12/06 (土) 12:05:16
大変、参考になりました。

私がproxyのチェックを行う際には、hostが存在するかどうかの他に、以下のような環境変数を配列に入れて、foreach文や正規表現と組み合わせてチェックしています。

@proxy = ("HTTP_CLIENT_IP",
"HTTP_VIA",
"HTTP_CACHE_INFO",
"HTTP_CACHE_CONTROL",
"HTTP_FORWARDED",
"HTTP_X_FORWARDED_FOR","HTTP_SP_HOST",
"HTTP_TE","HTTP_XONNECTION","HTTP_PROXY_CONNECTION",
"HTTP_XROXY_CONNECTION","HTTP_X_LOCKING",
"HTTP_PRAGMA","HTTP_IF_MODIFIED_SINCE","HTTP_PC_REMOTE_ADDR");

この他に、
$ENV{'HTTP_CONNECTION'}を調べ、値がkeep-alive以外であればproxyと...
しかしこの方法では、精度の高いproxyの判定は、厳しいのではないか...というのが現実でした。

最初から言えばよかったのかも知れませんが...というか、上手く説明できなったのですが、
私がやりたかったことは、結局のところ、
imgタグでしかCGIを起動できない環境で、3 ができるかどうかでした。
コードを直接置ける環境での、3のコードは書いたことがありますので、これをイメージをトリガーにした方法で実装できるかどうかが問題でした。
(telnetの自動起動は、いくらでも未然に防げるものの...)

これまでいろいろご教授いただきまして、ありがとうございました。
また書き込みにくるかもしれませんが、暫くは教えていただいた情報を元に試行錯誤してみます。

それでは、よい休日を。

No. 3453 # あかつき 2003/12/09 (火) 15:03:15
みなさん こんにちは。

すごく簡単な質問だと思うのですが、
過去ログを見てもわからなかったため質問いたします。


UNIXコマンドの
compress a 1>/dev/null 2>&1
というコマンドについて。
compress a は、aファイルをcompress形式で圧縮するということはわかるのですが、
1>/dev/null 2>&1 は、どういう処理をしているのかわかりません。

よろしくお願いします。

No. 3454 # 68user 2003/12/09 (火) 15:47:43
>>3451 perler
ありがとうございます。それなりにがんばります :-)

>>3452 Mule
どうもお互い無駄な時間を浪費したように感じます。掲示板で
円滑なコミュニケーションを行うにあたり、質問時にどの程度の
情報を書くべきかについて ご一考ください。

>>3453 あかつき
compress の出力を全て捨てるということです。

http://x68000.startshop.co.jp/~68user/unix/pickup?%A5%EA%A5%C0%A5%A4%A5%EC%A5%AF%A5%C8
http://x68000.startshop.co.jp/~68user/unix/pickup?%2Fdev%2Fnull

No. 3455 # あかつき 2003/12/10 (水) 16:48:23
ご回答ありがとうございました。

すでにまとめてありましたね。
こんどから、もっときちんと調べます。

No. 3456 # Hide 2003/12/10 (水) 17:45:44
大雑把な質問ですがResetConnect関数はどのように使うものなのですか?

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