68user's page 掲示板

Prev< No. 3985〜4067> Next  [最新発言に戻る] [過去ログ一覧]
No. 3985 # 68user 2004/10/08 (金) 00:54:06
>>3983
こちらの環境ではいずれも正常に表示されたので、解決方法は
わかりませんでした。少しずつ出力を削り、どこがまずいのか
調べましょう。

もし他の掲示板で質問する場合は、これまでに述べた環境に
加え、テーブルのどの部分がどういうふうに崩れるのかを
書くとよいでしょう。

>>3984 akuro
まずは問題が発生している箇所を切り分けましょう。

perl 実行後に od -cx などでファイルの内容を確認しましょう。
\r になっているなら、Windows 側かファイル転送時の問題です。
\r になっていないなら、Linux 側の問題です。

No. 3986 # akuro 2004/10/08 (金) 14:36:02
>>3985 68user

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

早速ファイルを確認してみましたところ、
(Vine,redhat8.0での確認)
→FREEBSDの方は今起動できないため後でテストしてみます。

0000000 a i u e o \r k a k i k u k e k o
                6961 6575 0d6f 616b 696b 756b 656b 6f6b
0000020 \r s a s i s u s e s o \r
                730d 7361 7369 7375 7365 0d6f
0000034

と同じ結果となり、¥rは存在する事が判明しました。
という事は、”Windows 側かファイル転送時”の問題のようです。

ファイルの取得方法はRedHatもVineもWinSCPを使用して受けとりました。
受け取ったクライアントPCは同じなので原因は転送時の気がします。
となると、SSHの設定かもしれないです。

まだ、原因はわかりませんが引き続き調査してみます。

No. 3987 # akuro 2004/10/12 (火) 19:08:09
>>3986 akuro

原因は、WinSCPでの転送中にファイルが加工されていたためでした。

一度ローカルにDLした後に、再度サーバーへUPしたところ
ファイルのダンプデータが異なりました(ファイルサイズも)。

0000000 a i u e o \r k a k i k u k e k o
                6961 6575 0d6f 616b 696b 756b 656b 6f6b
0000020 \r s a s i s u s e s o \r
                730d 7361 7369 7375 7365 0d6f

↓DL、UP後

0000000 a i u e o k a k i k u k e k o s
                6961 6575 6b6f 6b61 6b69 6b75 6b65 736f
0000020 a s i s u s e s o \0
                7361 7369 7375 7365 006f
0000031

sshd_configを調べてみても、転送モードらしきものは見つかりませんでした。
なにかよい方法はありませんでしょうか。
(FTPでバイナリモードにするしかないのでしょうか)
FTPを使用してバイナリ転送したところ、問題なく転送できました。

No. 3988 # 68user 2004/10/12 (火) 19:37:59
>>3987 akuro
WinSCP は知りませんが、
      http://itc.sfc.keio.ac.jp/ml/
の「2-6. 転送モードで[テキスト(T)] を選択します」という設定画面で
モード切替を行なえるように見えます。

> sshd_configを調べてみても、転送モードらしきものは見つかりませんでした。
わたしの知る限り、UNIX 的な ssh・scp は改行コード置換は行ないません。
WinSCP 独自のおせっかいな機能でしょう。

No. 3989 # akuro 2004/10/12 (火) 19:55:35
>>>3987

akuroと申します。なんども申し訳ありません。

先ほどは、改行コードを¥n→¥r変換しましたが。
¥nのままでもファイルに異常が生じるかテストしてみました所、
¥nの場合は問題なく転送できました。

No. 3990 # akuro 2004/10/12 (火) 20:07:26
>>3988 68user
返信ありがとうございます。akuroです。

問題解決いたしました。

ご指摘いただいたWinSCPの転送をバイナリにしたところ
問題なく転送できました。

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

No. 3991 # sugimoto 2004/10/14 (木) 18:28:40
sugimotoと申します。
OpenSSLとRSA暗号を調べていてここに辿りつきました。
あるユーザ様とCGIを介してデータ通信を行おうとしているのですが、ユーザ
様の指定で、データはRFC2313に準拠したRSA暗号化して送るという事になって
ます。
暗号化/復号については68user様のネットワークプログラミングの基礎を参考
に作れそうなのですが、唯一解決できない問題がありまして、ここに質問して
おります。
【問題点】
    ユーザ様から提示された仕様には暗号化キー/復号キーがそれぞれ1つしか
無い。
    RSAはモジュラスと私有指数,公開指数で暗号化/復号を行えるという理解な
のですが、ユーザ様の仕様ではモジュラスに該当する仕様が無いのです。
    RSAにおいて、このような事は可能なのでしょうか?
    例えば、opessl genrsaコマンドで作成したRSAキーなら、関数を使えば指数
とモジュラスに分割できるよ。など情報がありましたら教えて下さい。
※ユーザ様にも問い合わせ中なのですが、レスポンスの問題がありまして、
こちらにも質問した次第です。
    よろしくお願いいたします。

No. 3992 # 68user 2004/10/14 (木) 18:59:49
>>3991 sugimoto
> RSAはモジュラスと私有指数,公開指数で暗号化/復号を行えるという理解な
> のですが
そのとおりです。

> ユーザ様の仕様ではモジュラスに該当する仕様が無いのです。
これは定義の問題ではないでしょうか? 仕様にある「暗号化キー」は、
実は「モジュラスと公開指数」を意味する、ということはないですか?

# 「暗号化キー/復号キー」が具体的に何を指すのかよくわからない
# ので何ともいえないのですが。

> 例えば、opessl genrsaコマンドで作成したRSAキーなら、関数を使えば
> 指数とモジュラスに分割できるよ。など情報がありましたら教えて下さい。
genrsa で出力されるデータには、モジュラス・公開指数・非公開指数全てが
含まれていますので、可能です (openssl genrsa で生成したデータを読み込み、
openssl rsa -pubout で公開鍵を出力できるわけなので)。

試してませんが、genrsa で生成した PEM ファイルを
    http://www.openssl.org/docs/crypto/pem.html
などで読み込み、RSA 構造体を参照すればよいのではないでしょうか。

No. 3993 # sugimoto 2004/10/14 (木) 19:50:18
>>3992 68user
素早い回答どうも有難うございます。> 68User様
> > ユーザ様の仕様ではモジュラスに該当する仕様が無いのです。
> これは定義の問題ではないでしょうか? 仕様にある「暗号化キー」は、
> 実は「モジュラスと公開指数」を意味する、ということはないですか?
    ユーザからの回答として、上記が来る事を心待ちにしている所です。

  PEMファイルからモジュラスを抜き出す処理については、ユーザからの回
答を待ってからにしようと思っておりますが、必要になった場合は頑張って
みます。この処理を行いましたらまた報告します。

No. 3994 # sugimoto 2004/10/15 (金) 18:53:17
>>3993 sugimoto
sugimotoです。
結局PEMファイルから秘密指数/公開指数とモジュラスを抜き出す事にしました。
プライベート鍵ファイルからの読み込みは
PEM_read_RSAPrivateKey()という関数を利用する事で上手く行ったのですが、
パブリックキーの読み込みに失敗している状態です。
以下が読み込みプログラム
RSA *ReadPublicKey(char *keyfile)
{
    FILE *fp = fopen (keyfile, "r");
    RSA *pkey;
    if (!fp) return NULL;
    pkey = PEM_read_RSAPublicKey(fp,NULL,NULL,NULL);
    fclose (fp);
    if (pkey == NULL)
          ERR_print_errors_fp (stderr);
    return pkey;
}
この関数を実行すると、以下のエラーが出てしまいます。
=== ここから ===
5563:error:0906D06C:PEM routines:PEM_read_bio:no start line:pem_lib.c:669:Expect
ing: RSA PUBLIC KEY
Error: can't load public key
=== ここまで ===
渡しているファイルは
openssl rsa -in private.key -pubout -out public.key
で作成した、public.keyになります。
ちなみに、private.keyの読み込みは上記関数のPEM_read_RSAPublicKeyを
PEM_read_RSAPrivateKeyに変えた物で、問題無く動作します。
どなたか、private.keyの読み込みを行った方が居ましたら、助言をお願い
いたします。

No. 3995 # 68user 2004/10/15 (金) 19:02:13
>>3994 sugimoto
今実行環境がないのでわかりませんが、とりあえず気になったところだけ。

> プライベート鍵ファイルからの読み込みは
> PEM_read_RSAPrivateKey()という関数を利用する事で上手く行ったのですが、
これで RSA 構造体に「秘密指数/公開指数とモジュラス」がセットされていませんか?

あと、目的がよくわからないのですが、PEM ファイルは誰が作るのですか? (自分? 相手?)
なぜ「秘密指数/公開指数とモジュラス」を抜き出す必要があるのでしょうか?

No. 3996 # sugimoto 2004/10/15 (金) 20:12:28
>>3995 68user
> > プライベート鍵ファイルからの読み込みは
> > PEM_read_RSAPrivateKey()という関数を利用する事で上手く行ったのですが、
> これで RSA 構造体に「秘密指数/公開指数とモジュラス」がセットされていませんか?

はい。セットされます。
動作の確認のため、パブリック鍵ファイルも読み込みたかったのです。

> あと、目的がよくわからないのですが、PEM ファイルは誰が作るのですか? (自分? 相手?)
  PEMは自分で作成して、一方を相手に渡します。

> なぜ「秘密指数/公開指数とモジュラス」を抜き出す必要があるのでしょうか?
    PEMファイルの鍵を使って暗号化と復号を行いたいからです。

    で、当初の問題であったパブリック鍵の読み込みですが、
    PEM_read_RSA_PUBKEY() という関数を使ったところ上手く行きました。
    色々ご助言いただき有難うございました。

No. 3997 # 68user 2004/10/15 (金) 20:19:42
>>3996 sugimoto
> PEMファイルの鍵を使って暗号化と復号を行いたいからです。
PEM ファイルをロードしたら RSA 構造体が生成されるわけですから、
それを使って OpenSSL の関数で RFC2313 (PKCS#1) なデータを生成
するのはダメなのですか?

…と質問しようかと思ったのですが、おそらく「そういう仕様である」が
答えなような気がしますのでやめておきます。

No. 3998 # 68user 2004/10/15 (金) 20:29:31
>>3997 68user
あー、公開指数とモジュラスだけ (独自フォーマットで 相手側に送りたい、
という意図かな。

No. 3999 # sugimoto 2004/10/15 (金) 21:01:45
>>3998 68user
やりたい事を上手く伝える事ができないくて、すみません。
送信者は平文をPEM形式のパブリック鍵で暗号化し、
受信者はPEM形式のプライベート鍵で復号する。
という事を実現したかっただけなのです。
暗号化/復号の際にはPEM形式ファイル内の指数とモジュラスを抜き出す
必要があって・・・という話です。
と、ここまで書いて思ったのですが、もしかしてPEM形式の鍵をそのまま
使ってRSA暗号化する関数が存在するのでしょうか?
とすれば、何て無駄な事をしているんだ・・・。という感じです。

No. 4000 # nira 2004/10/15 (金) 22:11:58
はじめまして。
「HTTPクライアントを作ってみよう」に関して質問させてください。

一般的なHPなら「HTTPクライアントを作ってみよう(2)」のソースで、指定されたURLのhtmlファイル
のソースを読み込むことができますが、Operaブラウザでオートリダイレクトを有効にしていない場合
に表示されないようなURLを指定すると

<head><title>Object moved</title></head>
<body><h1>Object Moved</h1>This object may be found <a HREF="">here</a>.</body>

のようなhtmlソースを拾ってきてしまいます。

リダイレクト先のhtmlソースを拾ってくるようにしたいのですが、どのようにすればいいのでしょうか。

よろしくお願いします。

No. 4001 # 68user 2004/10/15 (金) 23:27:56
>>3999 sugimoto
> 送信者は平文をPEM形式のパブリック鍵で暗号化し、
まずこの表現が微妙に変です。PEM はフォーマットのひとつでしかありません。
「送信者は PEM形式で保存されている公開鍵を使って暗号化し」ならわかります。

# わかっている人が書いた文章であればあまり気になりませんが、今回は
# どうも理解があやしいのではないかという気がします。

PEM 形式でファイルに保存されている鍵を使って RSA で暗号化するのであれば、
PEM_read_RSAPrivateKey でファイルから鍵を読み込み、RSA 構造体に適切な
データをセットして、
    http://X68000.q-e-d.net/~68user/net/rsa-1.html
のように RSA_private_encrypt を使えばすみます。モジュラスなどを参照する
必要はありません。

コマンドラインから行うなら openssl rsautl -encrypt でも同じ結果になると
思われます。

なお、PKCS#1 では鍵が k オクテットのとき、最大でも k-11 オクテットのデータ
しか暗号化できませんが、それはよいのですか?

>>4000 nira
> リダイレクト先のhtmlソースを拾ってくるようにしたいのですが
Location ヘッダを見て、再度リクエストを送る必要があります。
    http://X68000.q-e-d.net/~68user/net/http-4.html#3
をどうぞ。

No. 4002 # アンドロメダ 2004/10/18 (月) 13:51:43
はじめまして!!
おしえてください。
UNIX(HP)のサーバー間でファイルを大量コピーする作業があります。
rcp -pr コマンドを使用したところ、ログインしたユーザ名で全てのファイルが移動されて
しまいます。
例)user1 file0001  コピー後⇒ user1 file0001
        root file0002 user1 file0002

所有者を変更せずにコピーできる方法があれば
どなたかご教授願います。
宜しくお願いします<m(__)m>

No. 4003 # 68user 2004/10/18 (月) 17:29:15
>>4002 アンドロメダ
root で実行してもダメですか? もしダメなら tar で固めてそれを rcp し、
tar xfp で展開するとよいでしょう。

No. 4004 # とーりすがり 2004/10/19 (火) 01:37:52
>>4002 アンドロメダ
rcpの-pオプションはパーミッションは保持されますが
ファイルのオーナーは変わってしまいます。
(Solaris、AIXでも同様)

大ざっぱですが、こんな感じで...
tar cfp - ./from_dir | rsh to_server "cd to_dir; tar xfp -"

No. 4005 # アンドロメダ 2004/10/19 (火) 15:15:24
みなさんアドバイスありがとうございました。
tarでまとめてリモートコピーする方法でテストしたところ
うまくできました。
ありがとうございました。\(^O^)/

No. 4006 # くろ 2004/10/21 (木) 23:18:25
はじめまして、くろと申します。

ここのサイトのネットワークプログラミング[ SSL/TLS でアクセスしてみよう (1) ]の
サンプルを元に、https接続で、メソッドをGETではなくPOSTで、データを送信したところ
HTTPステータス[400 Bad Request]が戻ってきてしまいます。

リクエストのヘッダーがおかしいのかな?と思い、下記のようにしたのですが、
POST プログラム名 HTTP/1.0
User-Agent: Mozilla/4.0 (compatible; MSIE 5.0; Windows NT 5.0)
Content-Length: 270
Content-type: text/xml; charset=utf-8

上手くいきませんでした。(改行コードは、\r\nです)

このステータスが戻ってくる原因として、他にどんなことが考えられますでしょうか?
正直、今の私にはここまで限界で・・・

どなたかご存知の方がいらっしゃいましたら、教えていただけませんでしょうか?

宜しくお願い致します。

No. 4007 # 68user 2004/10/22 (金) 01:39:07
>>4006 くろ
> POST プログラム名 HTTP/1.0
プログラム名って何ですか? https でなく http ならうまくいくんですか?
POST でなく GET ならうまくいくんですか?

POST を受けてくれる SSL/TLS サーバが手元にないので、
        https://www.rsasecurity.com/solutionsPrimary.asp
に対して以下のリクエストを送信してみましたが、正常なレスポンスを
取得できました。

        POST /solutionsPrimary.asp HTTP/1.0
        Host: www.rsasecurity.com
        Content-Length: 2

        ab

No. 4008 # くろ 2004/10/22 (金) 13:47:15
>>4007 68user

説明に至らない点があったみたいで、すみません。

>プログラム名って何ですか?
これは、POSTをするプログラム名を指しています。

教えて頂いたURLに、POSTしてみたのですが、
サーバーからのレスポンスとして、「HTTP/1.1 400 Bad Request」
が戻ってきました。。。

68userさんでは、上手くいっているようなので、
私のプログラムの問題のようですね。。。

既に6日間も悪戦苦闘しますので、
なにか助言などありましたら、お手数ですが宜しくお願いします。

No. 4009 # 68user 2004/10/22 (金) 13:54:22
>>4008 くろ
> これは、POSTをするプログラム名を指しています。
だからプログラム名って具体的に何ですか?
      POST hoge HTTP/1.0
とかしてたりしませんか? ちゃんと
      POST /hoge HTTP/1.0
としていますか?

んなこたわかっとると思われるかもしれませんが、あなたのレベルが
わからないので、こういうところから確認しているんですよ。

No. 4010 # 68user 2004/10/22 (金) 14:08:46
>>4008 くろ
> 教えて頂いたURLに、POSTしてみたのですが、
> サーバーからのレスポンスとして、「HTTP/1.1 400 Bad Request」
> が戻ってきました。。。
ああ、これを見落としていました。

ではリクエストのやり方が悪いのでしょう。ソースを提示してください。

No. 4011 # くろ 2004/10/22 (金) 15:14:32
>>4010 68user

ご迷惑をお掛けしまして、大変申し訳ありません。
プログラム名ですが、[POST hoge HTTP/1.0] という感じで、
設定しております。

以下がソースになります。

+−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−+
#include <stdio.h>
#include <string.h>
#include <sys/types.h>
#include <netdb.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <sys/types.h>
#include <sys/uio.h>
#include <unistd.h>

#include <openssl/crypto.h>
#include <openssl/x509.h>
#include <openssl/pem.h>
#include <openssl/ssl.h>
#include <openssl/err.h>

#define EXT_OK 0
#define EXT_ERR -1
#define LINE_MAX_LEN 512
#define FILE_PATH_LEN 256
#define SEND_XML_LEN 640
#define RECV_VAL_LEN 256

#define SEND_VALUE "xml=送信データ"

int main(int argc ,char *argv[])
{
    int ierr = 0;
    int isockt = 0;
    int read_size = 0;
    struct hostent *servhost; // サーバ情報構造体
    struct sockaddr_in server; // ソケット構造体
    struct servent *service; // サービス構造体
    
    SSL *ssl;
    SSL_CTX *ctx;
    
    char *str;
    char send_buf[SEND_XML_LEN + 1]; // 送信データ
     char request[SEND_XML_LEN + 1]; // ヘッダー
    char total_buf[RECV_VAL_LEN + SEND_XML_LEN + 1]; // 送信データ(ヘッダー + データ)
    char *host = "接続先ホスト名"; // サーバ名セット
    char *path = "CGIパス"; // CGI名セット
    char buf[RECV_VAL_LEN];
    
    memset(send_buf,'\0',sizeof(send_buf));
    memset(request,'\0',sizeof(request));
    memset(total_buf,'\0',sizeof(total_buf));
    
    servhost = gethostbyname(host);
    
    if ( servhost == NULL )
    {
        fprintf(stderr, "[%s] から IP アドレスへの変換に失敗しました。\n", host);
        
        exit( EXT_ERR );
    }
    
    bzero((char *)&server, sizeof(server));
    
    server.sin_family = AF_INET;
    
    bcopy(servhost->h_addr, (char *)&server.sin_addr, servhost->h_length);
    
    service = getservbyname("https", "tcp"); // ポート番号取得
    
     if ( service != NULL )
    {
         server.sin_port = service->s_port;
    }
    else
    {
         server.sin_port = htons(443); // 取得できなかったら、ポート番号を 443 に決め打ち
    }
    
     isockt = socket(AF_INET, SOCK_STREAM, 0);
    
    if ( isockt < 0 )
    {
         fprintf(stderr, "ソケットの生成に失敗しました。\n");
        
        exit( EXT_ERR );
    }
    
    if ( connect(isockt, (struct sockaddr*) &server, sizeof(server)) == -1 )
    {
         fprintf(stderr, "connect に失敗しました。\n");
        
        exit( EXT_ERR );
    }
    
    SSL_library_init(); // SSLのライブラリを初期化
    
    SSL_load_error_strings(); // SSLエラーメッセージ Catch
    
    ctx = SSL_CTX_new(SSLv23_client_method()); // SSLv2を使用
    
    ssl = SSL_new(ctx);
    
    SSL_set_fd(ssl, isockt); // SSLとソケットの関連付け
    
    ierr = SSL_connect(ssl);
    
    sprintf(send_buf,"%s",SEND_VALUE);
    
    sprintf(request, "POST %s.cgi HTTP/1.0\r\n"
                "User-Agent: Mozilla/4.0 (compatible; MSIE 5.0; Windows NT 5.0)\r\n"
                "Content-Length: %d\r\nContent-type: text/xml; "
                "charset=utf-8\r\n\r\n",argv[0],strlen(send_buf));
    
    sprintf(total_buf,"%s%s",request,send_buf);
    
    ierr = SSL_write(ssl, total_buf, strlen(total_buf));
    
    printf("サーバからのレスポンス\n");
    
    while (1)
    {
        memset(buf,'\0',sizeof(buf));
        
        read_size = 0;
        
         read_size = SSL_read(ssl, buf, sizeof(buf)-1);
        
        buf[read_size] = '\0';
        
        if ( read_size > 0 )
        {
            write(1, buf, read_size);
        }
        else
        {
             break;
         }
     }
    
    SSL_shutdown(ssl);
    
     close(isockt); // ソケットクローズ
    
    SSL_free(ssl);
    
    SSL_CTX_free(ctx);
    
     exit( EXT_OK );
}
+−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−+

申し訳ありませんが、ご教授ください。
宜しくお願いします。

No. 4012 # 68user 2004/10/25 (月) 10:06:59
>>4011 くろ
SSL/TLS 以前の問題に見えます。http://X68000.q-e-d.net/~68user/net/
    HTTP クライアントを作ってみよう(1)〜(4)
を読んでください。

No. 4013 # くろ 2004/10/25 (月) 17:16:29
>>4012 68user

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

なんと接続することができました。
ご迷惑をお掛けしまして、申し訳ありません。

No. 4014 # どんぐ 2004/10/25 (月) 20:25:48
環境変数にセットする値をConfigFileから読み込む仕様のシェルがあります。

しかし今その環境変数の値にスペースがある場合にうまく動きません。

具体的には

configFile内に
T_DATE=`date +'%Y%m%d%H%M%S'`

と記述して実際のBシェルの中で
for var in `cat ${CONFIG}`
do
export $var

done
としています。

想定としては
export T_DATE=`date +'%Y%m%d%H%M%S'`
となってほしいのですが

実際には
export T_DATE=`date

export +'%Y%m%d%H%M%S'`=+'%Y%m%d%H%M%S'`
という2つの変数として扱われてしまいます。
これを回避する方法はありませんでしょうか。
使用している環境はHP-UX B.11.11 です。

No. 4015 # 68user 2004/10/25 (月) 21:35:35
>>4014 どんぐ
while read line; do
    eval $line
done < ${CONFIG}

てな感じでどうでしょうか。

No. 4016 # Lococo 2004/10/26 (火) 10:33:08
Vacancies in SUN China
In 1982 Sun Microsystems created a business vision named “The Network is the Computer”. In the same year Sun initiated R&D on Java Technology. Today Sun is recognized by all as the Premier Network Enterprise Computing Vendor and have a global presence in over 100 countries. In 1987, Sun entered China market and has been dedicated to the technology and customer solution development in China.

Customer Solution Center in Beijing expand repidly to provide technical hot line suppot to mission critical customers. We invite top nortch engineers to join our champion team in Beijing to provide world-class customer services.

Solution Center Engineer (GC0201938) (53 Vacancies)
UNIX generalist responsible for providing system support that includes hardware, software, software applications, and networking to customers via telephone support. Incumbent must be university graduate in Computer Science / Electronic Engineering, knowledgable in O/S like Unix, Linux or Solaris systems, fluent in written and spoken Japanese and with minimum 3 years of Unix Sever Support, System Integration or internal MIS support of Unix Sever.

Solution Center Manager (GC0201941) (2 Vacancies)
Manages and directs the activities of the Solution Center teams to provide customer facing technical post sales support of both hardware and software issues. Accountable for meeting operational excellence, customer satisfaction and people management goals of Solution Center. Liaise closely with the product technical support group for technical escalation as well as the local field operations. Incumbent must be Universtiy graduate in Computer Science / Electronics Engineering, 10 years customer support experience with 5 years in managerial capacity and fluent in written and spoken Japanese, good English is a plus.


To apply this position, Please send your resume in English, Mandarin or Japanese and marked with position code to Lisa.wu@multimage.com.cn.
Contact:
Tel: +86 10-65057881-17 Lisa
                              84580901-17 Lisa
Mob: 13501160969
Fax: +86 10-65057880/84583069

No. 4017 # さいさん 2004/10/26 (火) 20:42:17
duコマンドで、ディスクの使用率をバイトで表示しようと以下の
コマンドを実施したのですが、サイズとディレクトリ名との間に
改行が入り、一行で表示できません。
サイズとディレクトリ名を一行で表示し、その後、改行したいの
ですがどうすればよいですか。

5295104
        .
2594816
        ./tmp1
1864704
        ./tmp2
821248
        ./tmp3
10240
        ./tmp4
      

5295104 .
2594816 ./tmp1
1864704 ./tmp2
  821248 ./tmp3
    10240 ./tmp4

としたいのですが。

du -k $1 | sort -n -r | awk '{ system("echo "$1"*1024 | bc"); printf(" %s\n", $2) }'

No. 4018 # 68user 2004/10/26 (火) 21:05:45
>>4017 さいさん
> du -k $1 | sort -n -r | awk '{ system("echo "$1"*1024 | bc"); printf(" %s\n", $2) }'
改行コードが余分なわけなので
    du -k | sort -nr | awk '{ system("echo "$1"*1024 | bc | tr -d \\\\n"); printf(" %s\n", $2) }'
    du -k | sort -nr | awk '{ system("echo -n `echo "$1"*1024 | bc`"); printf(" %s\n", $2) }'
とか。

わたしなら「わかりづらい」「無駄なプロセス生成が嫌」という理由から、
    du -k | sort -nr | awk '{ printf("%6d %s\n",$1*1024,$2)}'
などとします。

No. 4019 # さいさん 2004/10/26 (火) 23:04:36
>>4018 68user

>du -k | sort -nr | awk '{ printf("%10d %s\n",$1*1024,$2)}'
と最初はやっていたのですが、$1に設定されるブロックサイズが大きい
と「$1*1024」でオーバーフローを起こし、正しい計算ができないので
systemで、bcで計算をするようなことに

No. 4020 # NL 2004/10/26 (火) 23:08:07
>>4017 さいさん
>>4018 68user

>du -k | sort -nr | awk '{ system("echo -n `echo "$1"*1024 | bc`"); printf(" %s\n", $2) }'

サーバとかOSのバーションとか記述されてませんでしたけど、
「echo -n」は、依存しませんでしたか。

No. 4021 # さいさん 2004/10/27 (水) 09:50:10
>>4107 68user

>>4018 68user
>du -k | sort -nr | awk '{ system("echo -n `echo "$1"*1024 | bc`"); printf(" %s\n", $2) }'

shかcshで異なるみたいです。

バークレイ版では、「\c」 エスケープを「-n」オプションで代用することができます。
echo が csh(1) の組み込み関数として用いられている場合には、バークレイ方式に
従っています。

#du -k $1 | sort -nr | awk '{ system("echo `echo "$1"*1024 | bc` \\\\c"); printf(" %s\n", $2) }'
で、できました。

No. 4022 # ken [URL] [E-mail] 2004/10/27 (水) 23:42:33
こんにちは

kenといいます。

Winsockを使ってネットワークの勉強してまして大変勉強になりました。
ソケットプログラミングを進めていくうちにどうしてもわからない点が発生
したので、もしよろしければとおもいメールしました。

問題はSend()/Recv()でパケットサイズを超えるデータを連続で
送受信させたいのです。
パケットを超える送信をするにはsend()の引数にバッファ、サイズを
そのままのっければ、自動でパケットサイズに切り分けて送信してる
のを確認しました。ですが、受信終了を示す返り値のlengs=0を受信
できませんでした。どうも送ってないようです。httpサーバーに接続して
受信をためしたのですが、lengs=0を確認でき連続で受信することができました。
recv()での受信lengs:0はシャットダウンを意味するとの記述も見つけたのですが、
shutdown()では送信復帰ができないので、使えません。

パケットサイズを超えるデータを連続で送信し受信する時、
受信データの終了を送信したり、受信するにはどうすればいいので
しょうか?
サーバーがファイルの終了を示すleng=0を送信するのは
なにか命令があるのでしょうか?
ソケットをシャットダウンするとleng=0を送信できますが
シャットダウンを復帰できないはずですがしてるのでしょうか?

よかったらレスお願いしますm(__)m
page:homepage3.nifty.com/MIDI-EDITOR/
mail:NQD00781@nifty.com
ken

No. 4023 # 68user 2004/10/28 (木) 03:18:37
>>4022 ken
TCP ですか? それとも UDP ですか?

> パケットサイズを超えるデータ
パケットサイズって具体的に何のことを指していますか?

> 受信終了を示す返り値のlengs=0を受信できませんでした。
送信側で close か shutdown しましたか?

> shutdown()では送信復帰ができないので、使えません。
送信復帰って何ですか?

No. 4024 # どっかん 2004/10/28 (木) 13:12:28
sedを使用して先頭1行目のみ置換を行い、
すべてを出力させたいのですが、どうすれば
よいですか。

sed 's/o=test$/o=honban/g'
とすると置換は行われますが、先頭1行目のみ
だけしたいのです。

CM1: id=00001,nm=test,o=aaa,o=test
CM2: mod
CM3: option
-
CM4: ftp
CM5: get


CM1: id=00001,nm=test,o=aaa,o=honban
CM2: mod
CM3: option
-
CM4: ftp
CM5: get

No. 4025 # ken 2004/10/28 (木) 16:41:37
>TCP ですか? それとも UDP ですか?
TCPです。

>> パケットサイズを超えるデータ
>パケットサイズって具体的に何のことを指していますか?
send()/recv()での送信、受信レングスです。
この場合では、Recv時のレングスです。

>> 受信終了を示す返り値のlengs=0を受信できませんでした。
>送信側で close か shutdown しましたか?
サーバー側でデータを送信し、終了したらshutdown/closeを行うべき
なのでしょうか? 確かにレングス0を受信できますが、その後に
送受信を必要な場合はどうすればいいのでしょうか?
httpサーバーにアクセスした時はレングス0が帰ってきたのですが、
shutdownしていたのでしょうか?


>> shutdown()では送信復帰ができないので、使えません。
>送信復帰って何ですか?
送信の終了を示す、レングス0を送るためにclose/shutdownを使うと、
その後にアクセスができなくなる。
shutodownしたソケットを再使用は危険とMSDNにでてます。

No. 4026 # zsh 2004/10/28 (木) 18:59:37
>>4024 どっかん
sed -e '1s/o=test$/o=honban/'

No. 4027 # 68user 2004/10/28 (木) 19:21:13
>>4025 ken
要は、ピアが送信したデータが全部届いたことを確認したいのですか?
それならば、TCP/IP のレベルではなくアプリケーションのプロトコル
レベルで実現するのが普通です。

例:
    - 送信側は「データ長 + データ」を送信。受信側は最初に受け取った
        データ長の分だけデータを受信したら、全データ到着とみなす。
    - 改行コードをプロトコルのひとまとまりとみなす。送信側は
        データの末尾に改行コードをつけて送信。受信側は改行コードを
        受け取ったら全データ受信とみなす。

端的に言うと、
    recv の戻り値が 0 = FIN が届いたとき
です (ノンブロッキングモードなどの例外はあるかと思いますが)。

で、FIN を投げるには close か shutdown する必要があるということです。

No. 4028 # ken 2004/10/29 (金) 11:47:04
レスありがとうございました。m(__)m
>要は、ピアが送信したデータが全部届いたことを確認したいのですか?
はい。
>それならば、TCP/IP のレベルではなくアプリケーションのプロトコル
>レベルで実現するのが普通です。
httpサーバーにつなげてhtmlを受信した場合に受信終了時にrecv()戻り値が
0を送っていたのは、shutdown()がかかっていたと判断していいのでしょうか?
だとすれば、再度htmlを受信する場合は、再度acceptでsocketを作成して受信
開始する必要があるのかテストする必要を感じました。

何度もレスいただきましてありがとうございました。

No. 4029 # 68user 2004/10/29 (金) 12:37:29
>>4028 ken
> shutdown()がかかっていたと判断していいのでしょうか?
http サーバが shutdown か close したと判断してよいです。

> 再度htmlを受信する場合は、再度acceptでsocketを作成して受信
> 開始する必要があるのかテストする必要を感じました。
再度接続する場合は、クライアント側は socket を生成して connect
しなおす必要があります。サーバ側はリスニングソケットは listen
しっぱなしなので、クライアントが接続しなおしてきたら accept すれば
よいです。

ただし毎回接続・切断を繰り返していては性能が出ないため、HTTP/1.1 に
おいて keep-alive やパイプラインなどの、コネクションを切断せずに
複数のデータを取得するための仕組みが考案されているわけです (これも
アプリケーション層での工夫です)。

No. 4030 # sugimoto 2004/11/01 (月) 19:46:38
>>4001 68user
2週間程前PEM形式ファイルの読み込みで質問した者です。
なんとか手元を離れたので簡単に報告です。
処理は68user様のご指摘の通り行う事で全て対応できました。
色々ありがとうございました。
行ったのは以下の3処理です。
・PEM_read_RSAPrivateKey()でPEM形式ファイルを読み込む処理
    パスワード付きの場合の処理で少し苦労・・・
・RSA_private_encrypt()で暗号化する処理
・Base64エンコードの要求があったので、EVP_EncodeBlock()でエンコー
    ド処理
出来上がれば単純なのですが、着手した時は全くの白紙状態でしたので
本当に助かりました。有難うございました。

No. 4031 # 上田 [E-mail] 2004/11/02 (火) 15:36:15
いつも参考にさせていただいております。
初めて投稿します。
上田といいます。
よろしくお願いします。

『echo サーバを作ってみよう (3)』を参考にして、echoサーバを作成してみました。
概ねはうまくいきました。
しかし、おそらく子プロセスのものだと思うのですが、defunct(ゾンビ)が残ってしまいます。
このdefunct(ゾンビ)をうまく消す方法はないものでしょうか?

ちなみに、私の環境は
Cobalt LINUX 5.0
です。

もし、私の勘違いでしたらすみません。お許し下さい。
以上、よろしくお願いいたします。

上田

No. 4032 # 68user 2004/11/02 (火) 16:30:46
>>4031 上田
> このdefunct(ゾンビ)をうまく消す方法はないものでしょうか?
サンプルプログラムでは wait をさぼっているためゾンビが残ります。
サンプルを直そうと思いつつ、はや 2年近く経ってしまいました。

ひとつのやり方として、
>>2584 persianopeh
のように SIGCHLD をキャッチする方法があります。あるいは WNOHANG を
指定して waitpid してもよいです。

No. 4033 # 上田 [E-mail] 2004/11/03 (水) 12:09:01
>>4032 68user

68userさん、ありがとうございます。
教えていただいた $SIG{CHLD} = sub { wait }; ですが、不勉強なもので、記述する場所に若干の不安が残っています。
一応、43行目と44行目の間に記述したところ、次の3つは達成できました(目的は達成できました)。
・サーバ機能
・複数同時アクセス
・defunctの消去
もし記述する場所が間違っていれば、またご連絡いただけないでしょうか?

      36: # forkで子プロセスを生成
      37: if ( $pid = fork() ){
      38: # こちらは親プロセス
      39: print "親プロセス($$): 引続きポート $port を見張ります。\n";
      40: print "親プロセス($$): クライアントの相手はプロセス $pid が行います。\n";
      41:
      42: # 親プロセスはソケットをクローズ
      43: close(CLIENT);

                              $SIG{CHLD} = sub { wait };  #←←←ここに追加しました。

      44: next;

以上、ありがとうございました。
今後ともよろしくお願いいたします。

上田

No. 4034 # noza [E-mail] 2004/11/04 (木) 16:21:49
Cシェルの中で、sqlplusに接続してsqlを実行して結果を表示したいのですが、どのようにすればよいですか?
皆さん、教えてください。よろしくお願いします。

No. 4035 # アトヌル 2004/11/04 (木) 19:26:06
始めまして。
sedコマンドで、改行を含む文字列へ変換したいのですが、どのようにすればいいですか?

abcde
------
fgh
ijk

たとえば、abcdeをfgh(改行)ijkとしたい場合、

sed "s/abcde/fghijk/g" file1 > file2
これでは改行無しで置換されてしまいます。
\n,\r\nなど埋め込んでみましたがうまくいきませんでした。

皆さん教えてください、宜しくお願いします。

No. 4036 # 2004/11/04 (木) 19:34:08
Cシェルの中で、コマンドオプションの有無を判断するのには、どのようにIF文を書けば良いですか?
教えてください、よろしくお願いします。

No. 4037 # zsh 2004/11/06 (土) 19:36:04
>>4034 noza
ヒアドキュメントを使うとできた筈ですが
sqlplusの引数でユーザ名とパスワードが必要になるため
お勧めしません。

>>4035 アトヌル
sedでは確か無理だったと思います。
(嘘ついてたらごめんなさい。)

>>4036
コマンドオプションって何ですか?引数の事?

No. 4038 # 68user 2004/11/08 (月) 13:49:29
>>4033 上田
fork の前にシグナルハンドラを設定するのが普通かと思います。でないと、
設定前にシグナルが飛んできたら困りますので。

ただしシグナルハンドラは子プロセスに引き継がれるので、fork 後に
シグナルハンドラを戻すなどの対処が必要です (この例では子プロセスが
SIGCHLD を受けることはないので、どちらでも構わないのですが)。

>>4037 zsh
> ヒアドキュメントを使うとできた筈ですが
ヒアドキュメントでもいいし、別ファイルにしておいて
      sqlplus $user/$pass @hoge.sql
としてもよいです。

> sqlplusの引数でユーザ名とパスワードが必要になるためお勧めしません。
これはまぁいいんじゃないですかね。Perl で Oracle に接続しても
スクリプト中にパスワードを書きますし、Pro*C でもバイナリを
strings すればわかりますし。

No. 4039 # yamaさん [E-mail] 2004/11/08 (月) 21:26:09
yahooオークションの自動ログインシステムをプログラムしていますが、ログインできません。
どなたかご教授願います。以下にソースを掲載しておきます。

import java.net.*;
import java.io.*;

public class post {
    public static void main(String[] args) {
        try {
            int start = 0;
            PrintWriter pw = new PrintWriter
                        (new BufferedWriter(new FileWriter("post.html")));

            // URLクラスのインスタンスを生成
            URL helloURL =
                        new URL("http://login.yahoo.co.jp/config/login");

            // 接続します
            URLConnection con = helloURL.openConnection();
            // 出力を行うように設定します

            con.setDoOutput(true);
            con.setDoInput(true);

            con.setRequestProperty("Cookie","B=banotfp0orfbj&b=2");

            con.setRequestProperty("Accept-Language", "ja");
            con.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)");

            // 出力ストリームを取得
            PrintWriter out = new PrintWriter(con.getOutputStream());

            out.print(".tries=1");
            out.print(".done=http://page7.auctions.yahoo.co.jp/jp/auction/g25311966?");
            out.print(".src=auc");
            out.print("lg=jp");
            out.print(".intl=jp");
            out.print("login=********");
            out.print("passwd=*******");
            out.close();


            // 入力ストリームを取得
            BufferedReader in = new BufferedReader(
                                                                new InputStreamReader(
                                                                con.getInputStream(),"JISAutoDetect"));

            // 一行ずつ読み込みます
            String line;
            while ((line = in.readLine()) != null) {
                // 表示します
                pw.println(line);


            }


            // 入力ストリームを閉じます
            in.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

post.htmlにはログインされた後の商品ページが表示されます(ログインできれば)

No. 4040 # やまさん [E-mail] 2004/11/08 (月) 21:45:49
yahooオークションの自動ログインプログラムを開発していますが、どーしてもログイン
できません。どなたかご教授願います。以下にソースを掲載します。

import java.net.*;
import java.io.*;

public class post {
    public static void main(String[] args) {
        try {
            int start = 0;
            PrintWriter pw = new PrintWriter
                        (new BufferedWriter(new FileWriter("post.html")));

            // URLクラスのインスタンスを生成
            URL helloURL =
                        new URL("http://login.yahoo.co.jp/config/login");

            // 接続します
            URLConnection con = helloURL.openConnection();
            // 出力を行うように設定します

            con.setDoOutput(true);
            con.setDoInput(true);

            con.setRequestProperty("Cookie","B=banotfp0orfbj&b=2");

            con.setRequestProperty("Accept-Language", "ja");
            con.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)");

            // 出力ストリームを取得
            PrintWriter out = new PrintWriter(con.getOutputStream());

            out.print(".tries=1");
            out.print(".done=http://page7.auctions.yahoo.co.jp/jp/auction/g25311966?");
            out.print(".src=auc");
            out.print("lg=jp");
            out.print(".intl=jp");
            out.print("login=******");
            out.print("passwd=*****");
            out.close();


            // 入力ストリームを取得
            BufferedReader in = new BufferedReader(
                                                                new InputStreamReader(
                                                                con.getInputStream(),"JISAutoDetect"));

            // 一行ずつ読み込みます
            String line;
            while ((line = in.readLine()) != null) {
                // 表示します
                pw.println(line);
    

            }


            // 入力ストリームを閉じます
            in.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

なお、post.htmlには正常にログインできれば商品ページのソースを書き込みます。

No. 4041 # waka 2004/11/09 (火) 01:01:14
はじめまして、こんばんは.

http://x68000.q-e-d.net/~68user/net/c-http-1.html
http://x68000.q-e-d.net/~68user/net/c-http-2.html 関連で、
URL の解釈について、
http://www-cms.phys.s.u-tokyo.ac.jp/~naoki/CIPINTRO/CCGI/pbrowser.html
のような記事を見つけました.
正規表現でも見かけられるやりかたでできるのだなぁと目が覚めました.

質問でもなんでもないのですが、お邪魔しましたm(_ _)m

No. 4042 # 68user 2004/11/09 (火) 01:42:56
>>4040 やまさん
Java の実行環境がないので検証できませんが、普通にブラウザでアクセスし、
ethereal などでパケットダンプしましょう。さらに自作プログラムのやりとりも
同様にパケットダンプして見比べてみましょう。

>>4041 waka
http://www.din.or.jp/~ohzaki/perl.htm#httpURL というのもあります。

scanf 系で %[..] として文字集合が使えるのは初めて知りました。

No. 4043 # クライアント 2004/11/09 (火) 18:21:04
FTPクライアントで分割ダウンロードする場合、
どんなプログラムになるのでしょうか?
HTTPクライアントで分割アップロードする場合、
どんなプログラムになるのでしょうか?
教えて頂けませんか?

No. 4044 # 68user 2004/11/09 (火) 19:45:26
>>4043 クライアント
> FTPクライアントで分割ダウンロードする場合、
> どんなプログラムになるのでしょうか?
REST を使います。

> HTTPクライアントで分割アップロードする場合、
> どんなプログラムになるのでしょうか?
分割アップロードが PUT を指すのか POST を指すのか知りませんが、
規格としては分割アップロードなるものは規定されていないと思います。

サーバ側の CGI なり Servlet なりで引数を解釈するようなつくりに
すれば、なんだって可能です。

No. 4045 # やまさん [E-mail] 2004/11/09 (火) 20:34:29
68userさんご教授ありがとうございます。言われたとおりにパケットダンプしてソースを
書き直したところ、今度はcookieが無効であると言う画面がでました。
書き直したソースは以下の通りです。
import java.net.*;
import java.io.*;

public class post {
    public static void main(String[] args) {
        try {
            int start = 0;
            PrintWriter pw = new PrintWriter
                        (new BufferedWriter(new FileWriter("post.html")));

            // URLクラスのインスタンスを生成
            URL helloURL =
                        new URL("http://login.yahoo.co.jp/config/login");

            // 接続します
            URLConnection con = helloURL.openConnection();
            // 出力を行うように設定します


            con.setDoOutput(true);
            con.setDoInput(true);

            con.setRequestProperty("Accept","image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*");
            con.setRequestProperty("Accept-Language", "ja");
            con.setRequestProperty("Content-Type","application/x-www-form-urlencoded");
            con.setRequestProperty("Accept-Encoding", "gzip, deflate");
            con.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)");
            con.setRequestProperty("Host","login.yahoo.co.jp");
            con.setRequestProperty("Content-Length","145");
            con.setRequestProperty("Connection","Keep-Alive");
            con.setRequestProperty("Cache-Control","no-cache");






            // 出力ストリームを取得
            PrintWriter out = new PrintWriter(con.getOutputStream());

            out.print(".tries=1&.done=http%3A%2F%2Fpage7.auctions.yahoo.co.jp%2Fjp%2Fauction%2Fg25311966%3F&.src=auc&lg=jp&.intl=jp&login=formulaatsushi&passwd=formula3");

            out.close();



            // 入力ストリームを取得
            BufferedReader in = new BufferedReader(
                                                                new InputStreamReader(
                                                                con.getInputStream(),"JISAutoDetect"));

            // 一行ずつ読み込みます
            String line;
            while ((line = in.readLine()) != null) {
                // 表示します
                pw.println(line);


            }


            // 入力ストリームを閉じます
            in.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
etherealのログ
POST /config/login HTTP/1.1
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*
Accept-Language: ja
Content-Type: application/x-www-form-urlencoded
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)
Host: login.yahoo.co.jp
Content-Length: 145
Connection: Keep-Alive
Cache-Control: no-cache

HTTP/1.1 302 Found
Date: Tue, 09 Nov 2004 10:41:26 GMT
P3P: policyref="http://privacy.yahoo.co.jp/w3c/p3p.xml", CP="CAO DSP COR CUR ADM DEV TAI PSA PSD IVAi IVDi CONi TELo OTPi OUR DELi SAMi OTRi UNRi PUBi IND PHY ONL UNI PUR FIN COM NAV INT DEM CNT STA POL HEA PRE GOV"
Location: http://login.yahoo.co.jp/config/verify?.done=http%3a//page7.auctions.yahoo.co.jp/jp/auction/g25311966%3f&.src=auc
Cache-Control: private
Pragma: no-cache
Expires: Thu, 05 Jan 1995 22:00:00 GMT
Connection: close
Transfer-Encoding: chunked
Content-Type: text/html; charset=euc-jp
Set-Cookie: B=0jed4t90p17mm&b=2; expires=Thu, 15 Apr 2010 20:00:00 GMT; path=/; domain=.yahoo.co.jp
Set-Cookie: F=a=2AxMxi8sve2gE8jFN9rJ0gWrAAvZQREqLtzb2_UZvSzjM5JqtaIqse_xaCta&b=pEuj; expires=Thu, 15 Apr 2010 20:00:00 GMT; path=/; domain=.yahoo.co.jp
Set-Cookie: Y=v=1&n=2q7rnefmn4krh&l=5ehckb00jiki78/o&p=m2avvjp403000400&r=bk&lg=jp&intl=jp&np=1; path=/; domain=.yahoo.co.jp
Set-Cookie: T=z=W7JkBBWBfkBBIROI05ItUNi&a=YAE&sk=DAA.hvzZ6s/ztd&d=YQFZQUUBb2sBWlcwLQF0aXABYm4ySnNEAXp6AVc3SmtCQmdXQQ--; path=/; domain=.yahoo.co.jp

GET /config/verify?.done=http%3a//page7.auctions.yahoo.co.jp/jp/auction/g25311966%3f&.src=auc HTTP/1.1
User-Agent: Java1.4.0
Host: login.yahoo.co.jp
Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2
Connection: keep-alive

HTTP/1.1 200 OK
Date: Tue, 09 Nov 2004 10:41:26 GMT
P3P: policyref="http://privacy.yahoo.co.jp/w3c/p3p.xml", CP="CAO DSP COR CUR ADM DEV TAI PSA PSD IVAi IVDi CONi TELo OTPi OUR DELi SAMi OTRi UNRi PUBi IND PHY ONL UNI PUR FIN COM NAV INT DEM CNT STA POL HEA PRE GOV"
Refresh: 900; URL=http://www.yahoo.co.jp/
Cache-Control: private
Pragma: no-cache
Expires: Thu, 05 Jan 1995 22:00:00 GMT
Connection: close
Transfer-Encoding: chunked
Content-Type: text/html; charset=euc-jp
Set-Cookie: B=c0ev5h10p17mm&b=2; expires=Thu, 15 Apr 2010 20:00:00 GMT; path=/; domain=.yahoo.co.jp


/config/verify?.done=http%3a//page7.auctions.yahoo.co.jp/jp/auction/g25311を
getする際にヘッダー情報が変わってしまいます。
どなたかご教授願います。

No. 4046 # 68user 2004/11/10 (水) 14:48:48
>>4045 やまさん
正解は ethereal が教えてくれているはずですので、こういう質問は回答
する側としては非常につまらないのです。だから、質問する側も、もう
ちょっと努力する姿勢を見せてください。

> 今度はcookieが無効であると言う画面がでました
などというわけのわからんことを言っていないで、

    「IE では〜というリクエストを送っているが、Java だと〜という
        リクエストを送信してしまう。IE と同じリクエストを送信するには
        どうしたらよいか」

くらいの質問にブレイクダウンしてください。リクエストとレスポンスを
見比べるだけの注意力があれば簡単なはずです。

あと、HTTP の基本的な知識があるのかないのかさっぱりわからないので、
    http://x68000.q-e-d.net/~68user/net/
        HTTP クライアントを作ってみよう(1)〜(4)
を読んだ上で、telnet を使って接続してみてください。それに成功してから
初めて Java で実現するにはどうすればいいか、という話になるわけです。

一応ヒントだけは出しておきます。
      - /config/verify に cookie なしでリクエストしているのは誰か? まだ
          提示していないソースがあるのか? URLConnection クラスが自動的に
          再接続しているのか?
      - URLConnection が自動的に再接続しているのであれば、
          HttpURLConnection クラスを使って setInstanceFollowRedirects
          メソッドで再接続を抑止し、自前で cookie 付きで再接続してみては。

No. 4047 # 68user 2004/11/10 (水) 14:52:48
>>4046 68user
> 一応ヒントだけは出しておきます。
試したわけではないので、ヒントが的確かどうかは知りません。念のため。

No. 4048 # 68user 2004/11/12 (金) 02:28:59
当分の間、本掲示板での UNIX・ネットワークに関する一般的な質問の受け付けを
中止します。理由は
      http://X68000.q-e-d.net/~68user/cgi-bin/wwwboard.cgi?howtouse
さえ読まないマルチポスト馬鹿のせいで不愉快な思いをするのがアホらしくなった
からです。UNIX・ネットワークに関する一般的な質問がなされた場合、その書き込みを
削除することがあります。

今後は当ページのコンテンツに対するご意見・ご指摘のみ受け付けます。
あと、雑談も OK です。

これまで回答してくださった方々、まともな質問者の方々には深く感謝
いたします。ありがとうございました。

No. 4049 # has 2004/11/13 (土) 22:08:37
>>4048 68user
懇切丁寧な回答、いままでどうもお疲れ様でした。
なんだかんだ結局見てるだけで力になれず、すんません。

ところで、コンテンツに関するご意見・ご指摘は歓迎とのことですし、このまま
何もやりとりが亡くなるのも寂しいので、ちょっと一言。

「POP3クライアントを作ってみよう」で、APOPではサーバ側に生パスワードを
持っていないといけないという点でセキュリティ上イマイチである、と
書かれていますが、それではどんな方法だと納得できそうですか?
(crypt等したパスワードを使うというイメージ or もっとよい案?)

No. 4050 # 上田 2004/11/15 (月) 14:28:33
>>4038 68user
68userさんありがとうございます。返事が遅れてすみません。

実は『シグナルハンドラを戻すなどの対処』部分がよく分かりませんでした。
もしよろしければこの部分のコードを教えていただけないでしょうか?
本当は自分なりに勉強してこの部分のコードを書き、このサイトにアップしたいという気持ちはあるのですが、なにぶん初心者なもので。。。

実際のテストでうまくいっているということと、この例では子プロセスがSIGCHLDを受けることはないとのことですので、当面はとりあえず現在の位置で対応させていただきます。
もし『シグナルハンドラを戻すなどの対処』を私なりに見つけることができたら、本サイトで報告させていただきます。

上田

No. 4051 # 68user 2004/11/15 (月) 20:21:20
>>4049 has
その文章を書いたのは 5〜6年前なのでもう忘れてしまいましたが、
改めて考えてみました。

まず、
    - ファイルに生パスワードを保存しておくのはよいことではない
というのは納得していただけるかと思われます。

もちろん、デメリットを上回るメリットがあれば生パスワードを保存
してもよいのでしょうが、APOP については特にメリットらしきものは
見当たりません。

また、管理面からいっても、UNIX のシャドウパスワードと別管理でも
よい場合もあるでしょうし、別管理になっても構わない場合もあるでしょう。
しかし、APOP では別管理にせざるをえません (選択の余地がない)。

> それではどんな方法だと納得できそうですか?
APOP はサーバがクライアントにタイムスタンプを通知する際、サーバが
保持しているパスワードが
    - 生パスワード
    - パスワードの MD5 値
    - パスワードの SHA-* 値
のいずれであるかを通知する、というのがわたしの考えです。

そうすれば、クライアント側はそれに応じて入力されたパスワードをそのまま
送るか、MD5 値を送るかを決定できます。また、サーバ管理者の方針により、
生パスワードで管理することもできるし、シャドウパスワードと共用にする
こともできます。


なお、この部分はどうも叩かれ所のようで、この APOP 批判の文章を読んで
「こいつはわかってない」と評価している人を掲示板などで見かけます
(わたしは何がどうわかってないのかが理解できないので、何ともいえない
のですが)。

>>4050 上田
> 実は『シグナルハンドラを戻すなどの対処』部分がよく分かりませんでした。
> もしよろしければこの部分のコードを教えていただけないでしょうか?
$SIG{CHLD} = 'DEFAULT';
です。

No. 4052 # has 2004/11/16 (火) 23:49:40
>>4051 68user
> 管理面からいっても、UNIX のシャドウパスワードと別管理でも
> よい場合もあるでしょうし、別管理になっても構わない場合もあるでしょう。
> しかし、APOP では別管理にせざるをえません (選択の余地がない)。
そうですね。使う側がやりたいように出来るよう、自由度を持たせておくという
考え方のツールは多い気がしますし。

> サーバが保持しているパスワードが
> - 生パスワード
> - パスワードの MD5 値
> - パスワードの SHA-* 値
> のいずれであるかを通知する
同感です。

> なお、この部分はどうも叩かれ所のようで、この APOP 批判の文章を読んで
> 「こいつはわかってない」と評価している人を掲示板などで見かけます
そうなんですか。私にもよくわかっていないようなので誰かに教えて欲しいです。

RFC2195とかにはchallenge-response authentication protocolを使うと
サーバにパスワードを*平文で保存せずに済む*とあるようです。
ひょっとしてパスワードとは別の、もっと重要なことが理解できてない
ということなのかもしれないですね…。

No. 4053 # 68user 2004/11/17 (水) 14:33:25
>>4052 has
> RFC2195とかにはchallenge-response authentication protocolを使うと
> サーバにパスワードを*平文で保存せずに済む*とあるようです。
なるほど。

    http://www.lins.jp/~obata/imap/rfc/rfc2195ja.html
        鍵付き MD5 ダイジェストを利用し、サーバ上に平文で秘密鍵が保管
        される必要はないので、RFC 1734 で規定される POP3 の使用のための
        APOP より改善されたものからなるともいえる。

ということで、APOP はイマイチと自信を持っていえるようになりました。
該当ページもそのうち加筆・修正しておきます。

ところで RFC 2195 は IMAP と POP に CRAM を導入しよう、というものですが、
IMAP では CRAM-MD5 や CRAM-SHA に対応した実装がいろいろありますけど、
POP の方は普及してるんですかねぇ。

http://risky.cs.inf.shizuoka.ac.jp/~ynoguchi/index.php?POP%20(%20courier-pop%20)
には
      (courier-pop は) courier-imap と同様,CRAM-MD5, CRAM-SHA に対応可能
      だが,結局,そのプロトコルに対応するクライアントがない
とありますし。

No. 4054 # 68user 2004/11/17 (水) 20:04:11
>>4053 68user
更新しました。
    http://x68000.q-e-d.net/~68user/net/pop3-3.html

「シャドウパスワードと共通化できない」という批判は、CRAM-MD5 でも
共通化できないような気がしたので (crypt には salt があるけど、
CRAM-MD5 にはないし、CRAM-MD5 には ipad とか opad とかがあるけど、
crypt にはないから)、とりあえず削除してあります。

No. 4055 # やまさん 2004/11/18 (木) 22:50:36
>>4047 やまさん
68userさんお返事遅くなりました。四苦八苦しましたけど
ヒントいただいた通りプログラムを組みなおしたところ、
無事ログインできました。ありがとうございました。

No. 4056 # 68user 2004/11/20 (土) 04:12:12
なんとなくアンケートをとってみることにしました。
      http://X68000.q-e-d.net/~68user/tmp/questionnaire.cgi

No. 4057 # 68user 2004/11/24 (水) 00:24:59
「UNIX の部屋」を更新しました。
      http://X68000.q-e-d.net/~68user/unix/

No. 4058 # へにか [URL] 2004/11/24 (水) 07:42:01
http://x68000.q-e-d.net/~68user/unix/pickup?freebsd-update
注意点は以下の通り。とある文言の、
<li>freebsd-updateの<li>、
HTTP 経由でファイルを\取得するので、の\、
これらは、誤植でしょうか? でも、ソースを見ると<LI>と大文字で書かれてるし・・・

No. 4059 # 68user 2004/11/25 (木) 01:15:20
>>4058 へにか
ありがとうございます。修正しました。

誤植って言いはると void 氏みたいなので、タイプミスということでひとつ。

No. 4060 # へにか 2004/11/25 (木) 08:29:07
>>4059 68user
> 誤植って言いはると void 氏みたいなので、タイプミスということでひとつ。
了解しました。気になったので、検索かけたら・・・ 何て言っていいのやら。

No. 4061 # 68user 2004/11/28 (日) 04:14:13
日記。

    % mkdir dir
    % touch dir/file
    % chmod 400 dir
    % ls -l dir

としたとき、dir/file を stat(2) する権限がないわけなので、Permission
denied となる (Linux・Solaris では実際にそうなる)。
# http://x68000.q-e-d.net/~68user/unix/pickup?chmod

ところが FreeBSD では何も表示されず (エラーも出ず)、exit status も 0
で正常終了してしまっている。

これを調べようと、FreeBSD 5.2.1-RELEASE の ls ソースを見てみる。
# http://www.jp.freebsd.org/cgi/cvsweb.cgi/src/bin/ls/

ずっと ls ってのは opendir して readdir して stat するものだと信じていたが、
実際には
      fts(3) -- traverse a file hierarchy
      http://www.freebsd.org/cgi/man.cgi?query=fts&manpath=FreeBSD+5.3-RELEASE+and+Ports&format=html
を使っていて、上記のシステムコールは間接的にしか使用していなかった。

>>3773 68user
で買った本を読むと、しっかり書いてあった。
      この人の書く文章にはおもしろみのかけらもなく
なんて文句言う前に、ちゃんと目を通すべきということか (全然読んでなかった)。

fts(3) は 4.4BSD から実装され、GNU 方面では glibc2 で採用された。glibc の
マニュアルには
        BSD 4.4. fts ユーティリティは、将来の St -p1003.1-88 リビジョンに
        含まれると期待されている。
と威勢のいいことが書いてあるが、少なくとも Solaris9 には実装されていない。


はじめて fts(3) を使ってみる。以下のプログラムで、stat できない場合エラーと
判断できている。FreeBSD の ls にはそれっぽい箇所があるにはあるが、その処理が
うまく機能していないのか、あるいは謎の仕様なのか…。

-----
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fts.h>

main(){
        FTS *ftsp;
        char *path[2]={"dir", NULL};
        ftsp = fts_open(path, FTS_PHYSICAL | FTS_NOCHDIR, NULL);
        if ( ftsp == NULL ){
                perror("fts_open");
                exit(1);
        }
        FTSENT *ftsentp;
        while (1){
                ftsentp = fts_read(ftsp);
                if ( ftsentp == NULL ){
                        break;
                }

                struct stat *sp = ftsentp->fts_statp;

                printf("%c", sp->st_mode&S_IRUSR ? 'r' : '-');
                printf("%c", sp->st_mode&S_IWUSR ? 'w' : '-');
                printf("%c", sp->st_mode&S_IXUSR ? 'x' : '-');
                printf("%c", sp->st_mode&S_IRGRP ? 'r' : '-');
                printf("%c", sp->st_mode&S_IWGRP ? 'w' : '-');
                printf("%c", sp->st_mode&S_IXGRP ? 'x' : '-');
                printf("%c", sp->st_mode&S_IROTH ? 'r' : '-');
                printf("%c", sp->st_mode&S_IWOTH ? 'w' : '-');
                printf("%c", sp->st_mode&S_IXOTH ? 'x' : '-');
                printf(" %d %s\n", sp->st_mode, ftsentp->fts_path);

                if ( ftsentp->fts_info == FTS_NS ){
                        perror("stat failed");
                        exit(1);
                }
        }
        exit(0);
}
------

あと、
      http://www.freebsd.org/cgi/man.cgi
にて FreeBSD 5.3-RELEASE からは ports マニュアルも検索できるように
なっていることに気づいた。これは大変素晴らしい。

No. 4062 # 68user 2004/12/05 (日) 04:03:48
>>4056 68user
> なんとなくアンケートをとってみることにしました。
アンケートの受付を (11/27 の時点で) 終了しました。結果をお知らせします。

[質問]
68user's page で今後読みたいコンテンツがあれば選択してください (複数選択可)。

[選択肢]
1. UNIX コマンドのコンテンツ充実
2. UNIX howto (「〜するには?」集のようなもの)
3. UNIX インストール・サーバ構築
4. ネットワークプログラミングのコンテンツ充実
5. web と CGI についてのコンテンツ充実 (含 Java Servlet・EJB)
6. C 言語講座的なもの
7. 業務系システム構築講座 (設計・コーディング・DB)
8. プログラマや SE の仕事について思うことをつらつらと

[結果]
回答総数 67

1. 36(17%) ************************************
2. 42(20%) ******************************************
3. 27(13%) ***************************
4. 29(14%) *****************************
5. 13(06%) *************
6. 14(06%) **************
7. 18(08%) ******************
8. 25(12%) *************************

[感想]
1・2 が多いのは予想していましたが、5・6 が少ないのは予想外でした。

5 は書きかけのコンテンツのまま放置してあるので、その辺の情報を今ほしい
人はここにはいないってことでしょうか。6 は世の中は意外と保守的で、仕事で
いまだに C でごりごり書いている (書かされている) 人が多数いるに違いない
と予想したのですが、はずれたようで。

あと、7 より 8 の方が多いのもちょっと不思議です。


頂いたコメントについてですが、
> div 開始タグより div 終了タグが圧倒的に多い
とりあえず気づいたところは直しました。自分で確認して、あまりにも
閉じ側が多いので笑ってしまいました。

あと、
>>3951 ほんたか
> 1.「h 1文字左に移動」がリストからはみ出ています。
も直しました。

アンケート結果は今後の参考にさせていただきます。ありがとうございました。

No. 4063 # 68user 2004/12/06 (月) 02:27:19
「ネットワークプログラミングの基礎知識」に
      HTTP クライアントを作ってみよう(5) - 認証編 -
          http://X68000.q-e-d.net/~68user/net/http-auth-1.html
を追加しました。

No. 4064 # sqh00 [E-mail] 2004/12/19 (日) 13:12:22
こんにちは。 こちらのサイトに来るのは今日が初めてですが、内容が充実していて大変参考になるサイトですね。 今後も利用させて頂こうと思います。さっそくですが、xlibについて質問をさせてください。http://x68000.q-e-d.net/~68user/xprogram/xlib-1.html のxlib-1.c を
cc -o xlib-1 xlib-1.c -I /usr/X11R6/include -lX11 -L /usr/X11R6/li のように実行したら、何にも出て来なかった。私が使っているのは red hat linux 8.0です。宜しくお願いします。

No. 4065 # 68user 2004/12/20 (月) 00:08:34
>>4064 sqh00
カレントディレクトリに xlib-1 というバイナリが生成されているか、
あるいは何かしらのエラーメッセージが出力されていると思いますので
確認してみてください。

No. 4066 # sqh00 [E-mail] 2004/12/20 (月) 22:17:10
カレントディレクトリに xlib-1 というバイナリが生成されているが、実行できない。このように、実行したら、何にも出て来なかった。
  
      [root@dm1511 xlib]# xlib-1
        bash: xlib-1: command not found

No. 4067 # 68user 2004/12/20 (月) 22:35:27
>>4066 sqh00
カレントディレクトリにあるバイナリは
    % ./xlib-1
と実行してください (% はプロンプト)。

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