68user's page 掲示板

Prev< No. 3731〜3765> Next  [最新発言に戻る] [過去ログ一覧]
No. 3731 # marlboro [E-mail] 2004/05/27 (木) 11:50:40
C言語版FTPクライアントを実行させたところ、RETR後、レスポンスが2回続けて
ありますが(150、226)、226のレスポンスが異常に遅いです(6分後)。
Solaris8、ProFTP(関係ないとおもいますが。。。)の構成です。

No. 3732 # すすむ 2004/05/27 (木) 19:48:05
HP-UX11.00で、Bシェルなのですが、
awkで表示された内容をある数分出力したら別ファイルに
入れたいのですが、

---------------------------------------
#!/bin/sh
#

FILE="test.txt"
OUTPUT="output.txt"

awk -F" " '
        BEGIN {
                count = 0+0 ;
        }
function func() {
        if (・・・・) {
                printf("%s\n",$0) ;
                printf("\n") ;
                return 0;
        } else {
                return 1;
        }

}
{
        if (NF == 0) next ;
        if (NF == 2 && $1 == "dn:") {
                ret=func() ;
                if (ret == 0) count++ ;
        }
        if (count == 1000) {
                count = 0+0 ;
        }
}' ${FILE} > ?????
------------------------------------

1000件ごとに出力するファイル名を変えたい
「output_nnn.txt」ということはできるでしょうか。

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

No. 3733 # 68user 2004/05/27 (木) 20:54:46
>>3731 marlboro
ご報告ありがとうございます。

調べてみますが、
    - どこからどこ宛の接続なのか (Solaris8 から localhost 宛?)
    - OS 付属の FTP クライアントでは問題ないのか
    - (インターネット上に公開されているサーバであれば) 相手のサーバ名
を教えていただけると助かります。

>>3732 すすむ
HP-UX11.11 の /bin/awk で、
    out="output_nnn.txt";
    print "hoge"> out
などと出力ファイルを指定できるようです。後は out の内容を
動的に変えていけばよいでしょう。

対象ファイルを切り替えるときは close(out) すればリソースの
無駄が省けてよいかもしれません。

No. 3734 # すすむ 2004/05/27 (木) 22:55:17
>>3733 68user
ありがとうございます。

>HP-UX11.11 の /bin/awk で、
> out="output_nnn.txt";
> print "hoge"> out
>などと出力ファイルを指定できるようです。後は out の内容を
>動的に変えていけばよいでしょう。
>対象ファイルを切り替えるときは close(out) すればリソースの
>無駄が省けてよいかもしれません。

確認できる環境が近くにないので確認ができませんが、
以下の様なことなのでしょうか。
------------------------
#!/bin/sh
#

FILE="test.txt"
OUTPUT="output.txt"

awk -F" " '
        BEGIN {
                count = 0+0 ;
                num = 1;
                output="output_num.txt"
        }
        function func() {
                if (・・・・) {
                        printf("%s\n",$0) >> output ;
                        printf("\n") >> output ;
                        return 0;
                } else {
                        return 1;
                }
          }
          {
                if (NF == 0) next ;
                if (NF == 2 && $1 == "title:") {
                                ret=func() ;
                                if (ret == 0) count++ ;
                }
                if (count == 1000) {
                                count = 0+0 ;
                                num++ ;
                                output="output_num.txt"
                }
          }' ${FILE}

No. 3735 # 68user 2004/05/27 (木) 23:37:27
>>3731 marlboro
手元の複数の環境で実験した限りでは再現しませんでした。
>>3733 68user
をご参照の上、より詳細なご報告いただければ幸いです。

>>3734 すすむ
ご自分で動作確認して、わからなければ再度質問してください。

No. 3736 # すすむ 2004/05/28 (金) 08:44:07
>>3735 68user
>ご自分で動作確認して、わからなければ再度質問してください。

失礼しました。
ありがとうございました。
希望通りの動きをしました。

No. 3737 # kentarou 2004/05/28 (金) 08:45:29
>> 「./configure; make new_japan; make install」ってのがすごいですね。
> 何ヶ月か前にほうぼうでネタにされてましたね。configure と make は ; で
> なくて && でつなぐべきだとか、

ごめんなさい、教えてください。
;ではなく&&でつなぐとどうなるのですか?

No. 3738 # zsh 2004/05/28 (金) 12:41:31
>>3737 kentarou
例として、「cmd1 && cmd2」とした場合は、
cmd1の戻り値が0の場合のみcmd2を実行します。

No. 3739 # 68user 2004/05/28 (金) 13:03:19
>>3738 zsh
そして、make は成功時には 0 を、失敗時には 1 を返します。
# http://x68000.startshop.co.jp/~68user/unix/glossary.html#%CC%E1%A4%EA%C3%CD

よって && でつなぐことで、
    - configure でこけたら make 以降は行なわない
    - make でこけたら make install は行なわない
という効果があるわけです。

No. 3740 # 瓜倉 茂 [E-mail] 2004/05/28 (金) 17:25:42
Perl&CGIで授業の出席フォームを作成しようとしています。Perlは初心者です。
サーバーは、Windows2000+IIS+ActivePerl5.6.0で、ブラウザはIE6.0です。
クライアントマシンのIPアドレスを取得するPerlのコードでつまずきました。
inet_aton、gethostbyaddr、inet_ntoaの各関数を使ってIPアドレスを取得する
コードを試しましたが、ブラウザIE6.0のプロキシ設定をしていれば、プロキシ
のIPアドレスが取得でき、クライアントのIPアドレスが取得できません。もちろん
プロキシの設定を外せば、クライアントのIPアドレスが取れます。プロキシを設定
した状態で、クライアントのIPアドレスを取得できる方法がありましたら、ご教示
ください。

No. 3741 # 68user 2004/05/28 (金) 17:59:31
>>3740 瓜倉 茂
> クライアントマシンのIPアドレスを取得するPerlのコードでつまずきました。
IP アドレスは $ENV{REMOTE_ADDR} で取得できますよね。FQDN (ホスト名) の
取得が目的ですか?

それはそれとして、
> プロキシを設定した状態で、クライアントのIPアドレスを取得できる方法が
> ありましたら、ご教示ください。
については
>>3450 68user
の「理屈的には、100% の精度の proxy 判定は不可能です」のくだりを
読んでください。

100% は無理と書きましたが、学内限定でなおかつあなたが管理者の立場なの
であれば、必ず HTTP_X_FORWARDED_FOR を設定させるように proxy サーバの
設定変更するなどの手はあります。

ただ、根本的に信頼性がないので「web で出席を取る」という仕組みが妥当か
どうかは微妙な気がします。

No. 3742 # marlboro 2004/05/28 (金) 22:25:03
>>3733 68user
遅くなりました。すでに確認していただいているのですが。
>調べてみますが、
> - どこからどこ宛の接続なのか (Solaris8 から localhost 宛?)
> - OS 付属の FTP クライアントでは問題ないのか
> - (インターネット上に公開されているサーバであれば) 相手のサーバ名
>を教えていただけると助かります。
あて先は、同じネットワーク内に存在するサーバです。同じくSolaris8です。
UNIXのftpコマンド、Windowsのツール(FFFTP)では問題なく動作します。
#ftpコマンドでPASVで送受信する方法を知らないんですね。。。
サーバ側の問題とも考えにくいです。

No. 3743 # kentarou 2004/05/28 (金) 23:13:18
コマンドを&&でつなぐ件、勉強になりました。
ありがとうございます。

No. 3744 # 瓜倉 茂 [E-mail] 2004/05/28 (金) 23:38:23
68user様
早速のご回答ありがとうございます。Perlの使い方で問題が解決するのかと
思ってましたが、ネットワーク経由だと他のところも絡んでくるのですね。
Webにこだわらないで、出席を取る問題を再考してみます。

No. 3745 # 瓜倉 茂 [E-mail] 2004/05/28 (金) 23:43:36
marlboro様
先ほどのNo.3744の内容は、No. 3742のmarlboro様へのお礼でした。
あて先を間違い失礼しました。改めてmarlboro様の回答にお礼申し
上げます。

No. 3746 # 68user 2004/05/29 (土) 01:03:39
>>3742 marlboro
ProFTPD を相手にすると再現することがわかりました (一番
最初に試すべきことでしたね)。

    % time ./ftp-client -d anonymous foo@example.com ftp.proftpd.org /MIRMON.PROBE
    <-- 220 ProFTPD 1.2.10rc2 Server (proftpd.org Project) [81.223.20.36]
    --> USER anonymous
    <-- 331 Anonymous login ok, send your complete email address as your password.
    --> PASS foo@example.com
    <-- 230 Anonymous access granted, restrictions apply.
    --> PORT aaa,bbb,ccc,ddd,16,36
    <-- 200 PORT command successful
    --> RETR /MIRMON.PROBE
    1085749801
    <-- 150 Opening ASCII mode data connection for /MIRMON.PROBE (11 bytes)
    (ここで6分待たされる)
    <-- 226 Transfer complete.
    --> QUIT
    <-- 221 Goodbye.
    0.000u 0.005s 6:03.75 0.0% 0+0k 0+0io 0pf+0w

対策ですが、
    http://x68000.startshop.co.jp/~68user/net/c-ftp-1.html

        while (1){
                int read_size;
                read_size = read(data_socket, buf, BUF_LEN);
                ...
        }
の後に
        close(data_socket);
を入れることで直るようです。

データコネクションはサーバ側から切ってくれると認識して
いたのですが、間違いなのかもしれません。調査します。

ご指摘いただきありがとうございました。

> #ftpコマンドでPASVで送受信する方法を知らないんですね。。。
Solaris8 の ftp はカスなので、passive モードにできない
と認識しています。GNU モノや BSD モノなら、passive でできます。

No. 3747 # kouzu 2004/06/04 (金) 12:58:35
はじめまして。

ミラーリングの質問をさせていただきたいの
ですが、solaris8 10/01で
内蔵ディスクをRAID1は一般的でしょうが、
RAID1+0(ミラー+ストライピング)を構成
するのはアリなのでしょうか?

そもそもできるのでしょうか??

危険・・・?
ソフトはVeritasCSです。
VxVM VxFSも購入予定

標準内蔵DISKは73GBが6個で、
現状下記で振り分けようとしています。
disk1スライス: /(usr opt含む) , swap
disk2スライス: /export/home , /work

disk3,4でRAID1ミラーを予定だが、
RAID0+1が実は実現できそう・・・

No. 3748 # hash 2004/06/04 (金) 21:45:55
LAN内だけで有効なドメイン名(hogehoge.example等)を使いたいのですが、
そういったことは可能でしょうか?

具体的にはLAN内のWEBサーバに名前でアクセスしたり、
LAN内のメールアドレスを作りたいのです。

なんだか、漠然とした質問で申し訳ありません。
このようなことができるのであれば、解説しているサイトや、
検索に有効なキーワードでも教えていただけると幸いです。

サーバ構成は以下のようになっています。
・OS RedHat Linux8
・MTA sendmail 8
・DNS bind 9
・MUA OutLook Express 6(Windows2000, XP Pro)

WEBサーバにはローカルIPアドレスでアクセスし、
メールはWEBアプリからpostmaster@host.localdomainのように送信して、
POPはOutlook Expressで受信しています。

No. 3749 # hash 2004/06/04 (金) 21:51:53
>>3748 hash
> WEBサーバにはローカルIPアドレスでアクセスし、
> メールはWEBアプリからpostmaster@host.localdomainのように送信して、
> POPはOutlook Expressで受信しています。

度々すいません。
なんだか、意味のわからない文章になっていました。

現在は引用部分のように利用しているということです。
いろいろと面倒なので、何とかしたいと思って色々調べているのですが、
今のところ手がかりも見つからず質問させていただいた次第です。

No. 3750 # 金床 2004/06/05 (土) 06:10:55
>>3746 68user
興味があったので調べてみました。

現状のftp-client.cはデータコネクションでのデータ転送終了時にソケットのcloseを行っていないため、
サーバー側からのFIN-ACKパケットに対してFIN-ACKを送り返しません。

このため、データコネクションの切断について、クライアントからのFIN-ACKパケットを待つProFTPDと、
FIN-ACKパケットを特に待たない他のFTPDとの実装の差が、今回の問題であるプログラムの動作の差になっている
ようです。

>データコネクションはサーバ側から切ってくれると認識していたのですが、間違いなのかもしれません。
データコネクションの切断はサーバー側から行います。原理的に考えても、ファイルやファイルリストのサイズを
送信前に調べることはできませんので、これは間違いありません。

「サーバー側から切断」とはつまりサーバー側からFIN-ACKパケットが送信されるということです。
この際にreadが0を返すので、プログラムはwhileループを抜けます。
ここにclose(data_socket);を追加するとFIN-ACKを返信するようになり、ProFTPDはデータコネクションの切断が
正常に行われたと考え、処理が進みます。

つまり、close(data_socket);を追加することは「切断をクライアント側から行う」ことにはなりません。

以上、まとまりがなく申し訳ありませんが、参考になれば幸いです。

No. 3751 # TSURU 2004/06/05 (土) 17:31:35
初めて投稿します。

現在、sendmail 8.12.9 でSTARTTSLコマンドを有効にしてSSL接続を行っています。
デフォルトでは、SSLプロトコルバージョンは3.1です。これを、SSLプロトコル
バージョン3.0にする必要があるため、プロトコルバージョンが3.1の実行ファイル
と、3.0の実行ファイルを両方作成し、必要に応じて、実行ファイルを置き換えて、
sendmail を起動しなおして、sendmail に接続しています。
プロトコルバージョン3.0のものをコンパイルし、インストールした直後では、
正常にSSLプロトコルバージョンは3.0で通信できました。しかし、一旦、
SSLプロトコルバージョン3.1の実行ファイルに置き換えて起動し、数時間後に、
再度プロトコルバージョン3.0の実行ファイルで起動したところ、プロトコルバー
ジョン3.0では通信できないというおかしな状況になってしまいました。
プロトコルバージョン3.0で、通信できずにエラーとなった時の、
/var/log/syslog に出力された、sendmail のエラーメッセージは以下の
とおりです。

Jun 4 13:52:27 xxxx sm-mta[7195]: STARTTLS=server: 7195:error:1408F10B:SSL routines:SSL3_GET_RECORD:wrong version number:s3_pkt.c:290:

プロトコルバージョン3.0にする方法は、SSL_CTX_new() の引数に、
サーバの時はSSLv3_server_method()、クライアントの時は、SSLv3_client_method()を指定するという方法で行っています。
SSLライブラリは、OpenSSL 0.9.6c[engine] を使用しています。

どなたか、原因や対応方法などわかる人がいたら、ご教示していただきたいと
思います。
よろしくお願いします。

No. 3752 # bon 2004/06/05 (土) 18:29:25
お世話になります。
solaris9のx86版で、syslogの設定について質問なのです。
inetdから起動されるデーモンで、
クライアントのIP等の情報を/var/adm/messagesに出力させるには、
/etc/init.d/inetsvc内の最後を、「/usr/sbin/inetd -s -t」として、
マシンを再起動すれば良いらしいのですが、そのようにしてからtelnetで試したところ、
どうしてもログに出力されません。
/etc/syslog.confの設定はデフォルトのままで、
「*.err;kern.debug;daemon.notice;mail.crit /var/adm/messages」
の設定はコメントアウト等されていません。
他に何か設定すべき場所等ありますでしょうか?
宜しくお願い致します。

No. 3753 # zsh 2004/06/06 (日) 20:42:55
>>3752 bon
/etc/default/inetdに
ENABLE_CONNECTION_LOGGING=YES
の指定が必要です。

No. 3754 # zsh 2004/06/06 (日) 20:50:30
>>3748 hash
>WEBサーバにはローカルIPアドレスでアクセスし、
>メールはWEBアプリからpostmaster@host.localdomainのように送信して、
>POPはOutlook Expressで受信しています。

これが今の運用だとすると、
postmaster@host.localdomain
と指定している時点でローカルのドメインを使えているように見えますが・・・
クライアントからホスト名でアクセスするだけだったら
hostsファイルに指定してやれば良い気がします。

No. 3755 # bon 2004/06/06 (日) 21:41:14
>> 3753 zsh様
やっと動きました!
ありがとうございました。

No. 3756 # marlboro 2004/06/08 (火) 21:00:42
>>3746 68user
ありがとうございました。
動作確認できました。やはり6分待たされるんですよね。
>ProFTPD を相手にすると再現することがわかりました (一番
>最初に試すべきことでしたね)。
最初にお伝えするべきでした。

No. 3757 # 68user 2004/06/08 (火) 22:25:42
>>3747 kouzu
> RAID1+0(ミラー+ストライピング)を構成するのは
> アリなのでしょうか?
わかりません。RAID1 しかやったことがないです。

システム領域は RAID1 しか対応していないミドルウェアも
あるようですのでね。どう考えてもお仕事なようですから、
素人のアドバイスなど聞かず、まずは Veritas 社に問い
合わせることをお勧めします。

>>3750 金床
なるほど、勉強になります。サーバプログラムの書き方の違いとしては、
    クライアントの FIN-ACK を待たない
        ⇒ close か、shutdown(fd, SHUT_RDWR)
    クライアントの FIN-ACK を待つ
        ⇒ shutdown(fd, SHUT_WR) して、read が 0 を返すのを待つ
てな感じなんでしょうかねぇ。

>>3751 TSURU
単に 3.0 サーバに 3.1 プロトコルでお話しているということは
ないですよね? tcpdump や ethereal などでプロトコルバージョンを
確認しても間違いはありませんか?

SMTP over TLS は使ったことがないため、たいしたことは言えなくて
申し訳ないです。

No. 3758 # TSURU 2004/06/08 (火) 22:29:20
>>3751 TSURU
こんばんは。
V3.0で通信できない、という件ですが、設定方法を変えたら、正常にV3.0で通信
できるようになりました。
具体的には、sendmail.cfにて、CipherList を設定する方法で、できるように
なりました。
お騒がせしました。
68userさん、レスをいただきありがとうございます。

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

No. 3759 # 68user 2004/06/08 (火) 22:35:42
>>3758 TSURU
V3.0 と V3.1 で sendmail.cf を共用にしていたため、
V3.1 でしか使用できない Cipher を V3.0 で使おうとして
エラーになっていた、ということでしょうか?

No. 3760 # TSURU 2004/06/08 (火) 23:10:56
>>3759 68user
いや、それはないと思います。
sendmail.cfファイルも、V3.0用とV3.1用で別々に作成して、置き換えて使っています。
僕も、それほどSSLについて詳しいわけではありませんが、
SSLプロトコルバージョンと暗号化アルゴリズム(Cipher)は、直接は関連性はないように
思います。
おそらく、この認識で合っているとは思いますが。

No. 3761 # 68user 2004/06/08 (火) 23:31:37
>>3760 TSURU
SSL3.0 と TLS1.0 (≒SSL3.1) の仕様上は、使用できる暗号
スイートに違いがあります。たとえば SSL3.0 では FORTEZZA
が使用できましたが、TLS1.0 では削除されました。また、AES
関連の暗号スイートについては、TLS のみに追加されました。
今後も新規暗号スイートは TLS のみに追加されていくでしょう。

http://www21.ocn.ne.jp/~k-west/SSLandTLS/rfc2246-Ja.txt
http://www21.ocn.ne.jp/~k-west/SSLandTLS/draft302-Ja.txt
http://www21.ocn.ne.jp/~k-west/SSLandTLS/rfc3268-Ja.txt

# ただし実装においては SSL3.0 と TLS1.0 はコードを共有して
# いるでしょうから、もしかしたら SSL3.0 で AES が使用できる
# ような実装もあるのかもしれません。

よって、暗号スイートの違いから接続がうまくいかなかったのでは
ないかと考えた次第です。

後学のために教えていただきたいのですが、
>>3758 TSURU
> sendmail.cfにて、CipherList を設定する方法
何と書くとうまくいかなくて、何と書くとうまくいったのか
お教えいただけますか?

No. 3762 # TSURU 2004/06/09 (水) 23:37:31
>>3761 68user

1.通信できなかった場合
sendmail.cfで、CipherList は特に設定していない。
また、SSL_CTX_new() の引数にSSLv3_server_method()、
又は、SSLv3_client_method()を指定する。
この方法だと、通信できなくなった。

2.通信できた場合
sendmail.cfで、CipherList に、DEFAULT:+SSLV3 を指定する。
また、SSL_CTX_new() の引数にSSLv23_server_method()、
又は、SSLv23_client_method()を指定する。
(つまり、sendmail のソースコードをいじらないままの状態です。)
この方法で、正常に通信できるようになりました。

No. 3763 # aits 2004/06/09 (水) 23:37:44
どなたかご教授下さい。

すでに動いているSolaris8の機器に新規Diskを追加し、Formatコマンドでパーティション切って、
labelしたあとにリブートする必要はありますか?
リブートしないと反映しないのですかね?
リブートは必要ないと思っていますが。。

No. 3764 # 68user 2004/06/10 (木) 00:40:32
>>3762 TSURU
ありがとうございます。暇を見つけて試してみたいと思います。

>>3763 aits
リブートして /etc/vfstab の内容が正しいことを検証しておく
方がよいと思われますが、リブートが必須かどうかと問われれば、
必須ではありません。リブートせずに、そのまま mount できます。

No. 3765 # 金床 2004/06/10 (木) 10:25:20
>>3757 68user

>サーバプログラムの書き方の違いとしては、
> クライアントの FIN-ACK を待たない
> ⇒ close か、shutdown(fd, SHUT_RDWR)
> クライアントの FIN-ACK を待つ
> ⇒ shutdown(fd, SHUT_WR) して、read が 0 を返すのを待つ
> てな感じなんでしょうかねぇ。

ProFTPDのソースを見てみました。ご指摘の通り、
shutdown(fd, SHUT_WR)
になっていました。
#実際にはSHUT_WRはハードコーディングされて1になっていましたが

shutdown後にreadしているかどうかまでは追えていません。
時間があるときにコードを書いてshutdownの動作を確かめてみたいと思ってます。


ちなみにProFTPDのこの部分を
shutdown(fd, SHUT_RDWR)
に変えてみたところ、closeを追加しないftp-client.cでも処理が止まらずに進むことを確認できました。

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