ここ数ヶ月 (web 引越し前)、マルチポストしたり回答しても返事すら 書かない質問者が多く、困っていました。困るだけならまぁいいんですが、 わたしの web 更新のモチベーションを大いに下げてくれました。 というわけで、↑に書いたとおり、 http://x68000.q-e-d.net/~68user/cgi-bin/wwwboard.cgi?howtouse を読まない・読んでも守りたくない人は質問しないでください。 もちろん、これらのルールを守っておられる方々の質問は引き続き 歓迎いたします。 これはマナーではなく、この掲示板のルールであることに注意して 下さい。これが気にいらない方は (当然ながら) この掲示板を見ない 自由があります。 web 引越し後は以前のような不届きな質問者はいなくなったようで、 とてもうれしく思っています。 |
68userさま、回答ありがとうございます。 教えていただいたページをじっくり読んでみます。 |
>>3845 ニッタン 自分用のメモ。ソースが SSL_CTX *ctx = SSL_CTX_new(SSLv23_client_method()); SSL ssl = SSL_new(ctx); SSL_connect(ssl); となっていたとして、 SSL_CTX *SSL_CTX_new(SSL_METHOD *meth){ ret->method=meth; SSL_METHOD *SSLv23_client_method(void){ SSLv23_client_data.ssl_connect=ssl23_connect; int ssl23_connect(SSL *s) ret=ssl23_client_hello(s); static int ssl23_client_hello(SSL *s) RAND_pseudo_bytes(p,SSL3_RANDOM_SIZE); int RAND_pseudo_bytes(unsigned char *buf, int num) const RAND_METHOD *meth = RAND_get_rand_method(); return meth->pseudorand(buf,num); /* (*1) */ const RAND_METHOD *RAND_get_rand_method(void) default_RAND_meth = RAND_SSLeay(); /* (*2) */ return default_RAND_meth; static int ssleay_rand_pseudo_bytes(unsigned char *buf, int num){ ret = RAND_bytes(buf, num); static int ssleay_rand_bytes(unsigned char *buf, int num) if (ok){ ... } else { RANDerr(RAND_F_SSLEAY_RAND_BYTES,RAND_R_PRNG_NOT_SEEDED); ときて「PRNG not seeded」エラーになる、てな感じですかね。 (*1) RAND_METHOD rand_ssleay_meth={ ssleay_rand_seed, ssleay_rand_bytes, ssleay_rand_cleanup, ssleay_rand_add, ssleay_rand_pseudo_bytes, ssleay_rand_status }; typedef struct rand_meth_st { void (*seed)(const void *buf, int num); int (*bytes)(unsigned char *buf, int num); void (*cleanup)(void); void (*add)(const void *buf, int num, double entropy); int (*pseudorand)(unsigned char *buf, int num); int (*status)(void); } RAND_METHOD; (*2) RAND_METHOD *RAND_SSLeay(void) return(&rand_ssleay_meth); |
68user様。回答ありがとうございました。 自分なりに調べまして解決しました。助言を下さってありがとうございます。 |
To UNIXの部屋管理者様 もしかすると変なことを行ってるかもしれませんが。 cp -r の項目で以下の解説が有りますが。 -R ディレクトリを再帰的にコピーする ディレクトリ dir1 以下に、ファイル foo・bar があった場合、 % cp -R dir1 dir2 は、ディレクトリ dir2 の下にディレクトリ dir 1をコピーする。つまり dir2/dir1/foo、dir2/dir1/foo <<<<<<<<<の二項目はdir2/dir1/barではないでしょうか というファイルが新たに作成される。一方、 % cp -R dir1/ dir2 とすると(`/'を付けると)、dir2 の下に dir1 以下のファイル・ディレクトリをコピーする。つまり dir2/foo、dir2/foo <<<<<<<<<同様にの二項目はdir2/barではないでしょうか というファイルができる。 |
68userさん、はいそうです。 ここまで調べるのは苦労しませんでしたか? 私はマスタリングTCP/IP SSL/TLS編がなければ 未だに判らなかったと思います。 |
ただいまSLL勉強中です。このHPも参考にさせて頂いています。 つまらない質問ですが初心者の至りということでお許しください。 ネットワークプログラミングの基礎知識 >> RSA で暗号化してみよう (1)に 暗号化のサンプルがありますが、これらの作業はOpenSSLのライブラリの中で 行われている事なのでしょうか。 たとえば、ネットワークプログラミングの基礎知識 >> SSL/TLS でアクセスしてみよう (1) には暗号化の記述はありませんが実際には指定したプロトコルで暗号化が行われている と思います。どこで実装されるものなのでしょうか? |
>>3866 鶏 ご指摘のとおりかと思います。というわけで、修正しました。 http://X68000.q-e-d.net/~68user/unix/pickup?cp ありがとうございました。 >>3867 ニッタン > ここまで調べるのは苦労しませんでしたか? 調べるのに 3日かかってますので、苦労しました。 でも、なぜ RAND_poll() したらエラーにならないのかいまいち わかっていません (別にこれがわからなくても構わないんですが、 気になるもので)。 >>3868 jeiu > どこで実装されるものなのでしょうか? OpenSSL のライブラリの中です。 SSL/TLS はクライアントが利用可能な暗号 (正しくは暗号スイート) を 提示し、サーバがその中から選びます。よって常に RSA が使用される わけではありません (DH を使う場合もある)。 で、暗号スイートを提示したり、RSA で暗号化・復号化したり、 DH で鍵交換したり、プレマスターシークレットを送ったり、 ということはすべて OpenSSL のライブラリ中で記述されています。 |
>調べるのに 3日かかってますので、苦労しました。 でしたら、やはりお持ちのマスタリングTCP/IP SSL/TLS編を 辞書的に使いながら追いかける方がいいかもしれませんよ。 >でも、なぜ RAND_poll() したらエラーにならないのかいまいち わかっていません 結局、RAND_poll()内で乱数の種をプロセスIDや/dev/randomなどを使って作成して RAND_add()しているからだと思います。 RAND_seed()も結局、RAND_add()をしていますし。 |
>>3870 ニッタン /dev/random や /dev/urandom がない環境ではエラーになるが、 RAND_poll() を呼ぶとうまくいくと。 ということはおそらく RAND_poll() を呼ぶと http://snapshots.jp.freebsd.org/tour/current/userland/S/7348.html#145 に処理が移ると思います。 # このソースは OpenSSL 0.9.7d です。 ここでは /dev/random や /dev/urandom を読んでいろいろやって ますが、/dev/random や /dev/urandom がない環境なので、結局は unsigned long l; l=curr_pid; RAND_add(&l,sizeof(l),0); l=getuid(); RAND_add(&l,sizeof(l),0); l=time(NULL); RAND_add(&l,sizeof(l),0); だけが実行されると思います。ここで 第三引数の entropy には全て 0 を 渡しています。 RAND_add を呼ぶと ssleay_rand_add が呼ばれ、 http://snapshots.jp.freebsd.org/tour/current/userland/S/7341.html#190 が実行されます。 if (ok) return(1); else RANDerr(RAND_F_SSLEAY_RAND_BYTES,RAND_R_PRNG_NOT_SEEDED); とあるのがエラーになっている箇所かと思います。つまり RAND_poll() を 呼ぶと ok が真になり、RAND_poll() を呼ばないと偽になる、と。ここで ok とは何かというと ok = (entropy >= ENTROPY_NEEDED); です。ENTROPY_NEEDED は ./crypto/rand/rand_lcl.h:#define ENTROPY_NEEDED 32 /* require 256 bits = 32 bytes of randomness */ なので、entropy <= 32 なときに RPNG_NOT_SEEDED でエラーになる。 逆に言えば、RAND_poll() を呼ぶと entropy >= 32 になるためうまく いくようになる、ということです。しかし entropy を増やしているのは entropy += add; しかないような気がします。でも、add は RAND_add() の第三引数で、 今回はすべて 0 が渡されています。よって、 entropy += 0; となるわけです。それなのになぜ entropy が増えて >=32 になるのか わからないなぁ、といったところで止まっています。 「マスタリングTCP/IP SSL/TLS編」は調べましたが、内部構造には 触れていようで見つけられませんでした。もしどこかに載っていたら 教えてください。 |
>>3872 68user 続きです。 こちらには /dev/random・/dev/urandom が存在しない環境がないため、 FreeBSD で OpenSSL のソースをいじって、無理矢理 /dev/random・ /dev/urandom が存在しない状況を作ってみました。その結果、 PRNG not seeded なエラーが発生しました。 しかし SSL_connect() の直前に RAND_poll() を挿入しても、同じく PRNG not seeded となりました。そこで確認させていただきたいのですが、 >>3845 ニッタン > SSL_connect()するまでに以下の関数のどれかを使うと良い様です。 > 3、RAND_poll() > 一番楽なのは3を使うのが楽ですし、一般的で確実かもしれません。 はそちらの環境では正常に動作しているのですよね? |
回答ありがとうございます。 もうひとつ教えてください。 >SSL/TLS はクライアントが利用可能な暗号 (正しくは暗号スイート) を >提示し、サーバがその中から選びます。よって常に RSA が使用される >わけではありません (DH を使う場合もある)。 クライアントから提示する暗号方式とはなにをもとに決められるのでしょうか? たとえば、SSL V2に対応したアプリケーションとかV3に対応した アプリケーションとかで決まることなのでしょうか? または、Open SSL等で自力でSLLを実装するような場合は、対応できる暗号方式が 特定される(できる?)のであれば、それだけでは決まらないような気もしますが...。 |
>>3873 jeiu > クライアントから提示する暗号方式とはなにをもとに決められるのでしょうか? クライアント作成者が勝手に決めます。例えば 3DES と RC4 はいいけど DES は暗号強度が気に入らないから使わないとか、MD5 より強固な SHA-1 を 使うとか。 OpenSSL であれば SSL_CTX_set_cipher_list() を使って好きな暗号 スイートをセットすればよいでしょう。 暗号スイートは具体的には http://www21.ocn.ne.jp/~k-west/SSLandTLS/rfc2246-Ja.txt の TLS_RSA_WITH_3DES_EDE_CBC_SHA TLS_DH_anon_WITH_3DES_EDE_CBC_SHA などを指します。 上記 RFC の ClientHello がクライアントからの暗号スイートの提示、 ServerHello がサーバからの暗号スイート決定通知、です。 > または、Open SSL等で自力でSLLを実装するような場合は、対応できる暗号方式が > 特定される(できる?)のであれば、それだけでは決まらないような気もしますが...。 これは意味がわかりませんでした。 |
誤解を招くような書き方をしてしまいました。 申し訳ありません。 まず、RAND_poll()はRAND_byte()やRAND_status()の始めての呼び出しの際に 一度だけ呼ばれていると思われます。 RAND_poll()内では/dev/random・/dev/urandomを使用して 乱数の種を作っています。 /dev/random・/dev/urandomが存在しない環境でも 上記の様にRAND_poll()は呼ばれていますが、 No.3871の通り 乱数の種は作られません。 そこで、RAND_poll()を自前で呼び出しても同じ結果になります。 つまり、RAND_F_SSLEAY_RAND_BYTES,RAND_R_PRNG_NOT_SEEDEDのエラーが 発生した時は RAND_poll()で乱数の種を作成するのに失敗しているので、 自前で乱数の種を作らないといけない と言った説明を追記して頂ければいいと思います。 自前で乱数の種を作るのが 1、RAND_load_file() や 2、RAND_seed() と言う訳です。 貴重な時間を割かせてしまいまして、申し訳ありませんでした。 |
>>3875 ニッタン 更新しました。長らくお待たせしてすいません。 http://X68000.q-e-d.net/~68user/net/ssl-1.html 詳しく説明しようとして、ドツボにはまった感がありますが、 いかがでしょうか。 RAND_status を呼べばその中から RAND_poll が呼ばれるのですが、 あえて RAND_poll を呼んでいるのは、マニュアルに書いてないこと はなるべく前提としないでおこう、という方針だからです。 最初のサンプルプログラムがこれではわかりづらすぎるかなぁ。 |
ありがとうございます。 色々と勉強したので、私には理解できますが、 今後、初心者が読んだ場合に理解できるかはどうかは、 この掲示板にでも書き込んでくれる事を期待して、 この話題は一旦終了しましょう。 >最初のサンプルプログラムがこれではわかりづらすぎるかなぁ。 結局、/dev/randomがない環境では、種を作らないとエラーになるので 仕方ないと思います。 一応、/dev/randomがある環境では必要ないと補足してありますし。 今までありがとうございました。今後も参考にさせて頂きます。 |
>> または、Open SSL等で自力でSLLを実装するような場合は、対応できる暗号方式が >> 特定される(できる?)のであれば、それだけでは決まらないような気もしますが...。 >これは意味がわかりませんでした。 わけのわからない質問をしてすみません。 聞きたかったのは、クライアントが決める暗号化方式はどこで定義するのか? とういうことでした。 あるHPでは、「暗号化に関する特許などが絡んでいるため、わけのわからないものは コンパイルオプションを使って使用しないほうがよいでしょう」と書かれていたり、 ちょっと混乱状態です。 も少し勉強が必要かなと思います。 |
68user殿 No.3874の >OpenSSL であれば SSL_CTX_set_cipher_list(ctx,ciphers) を使って好きな暗号 >スイートをセットすればよいでしょう。 のciphersには具体的にはどのような設定をすればよいのでしょうか? いずれにしても、どの暗号化方式を利用するかは上記のようにプログラミング依存 ということになるんでしょうか?(とすると、No.3878にも書かせていただきましたが 「コンパイルオプションを使って...」は何を意味するのでしょう。ご存知でしたら教 えてください)。 |
>>3879 jeiu > ciphersには具体的にはどのような設定をすればよいのでしょうか? 概念は 3874で書いたとおり > 例えば 3DES と RC4 はいいけどDES は暗号強度が気に入らないから使わない などです。 ソースでどう書くかという意味なら SSL_CTX_set_cipher_list(ctx, "3DES:RC4"); や SSL_CTX_set_cipher_list(ctx, "ALL:-DES"); などです。書き方は OpenSSL のマニュアル ciphers(1) に載っています。 > 「コンパイルオプションを使って...」は何を意味するのでしょう。 「あるHPでは」などと曖昧なことを書かずに http://www.ryouto.jp/linux/linux_22.html とはっきり書いてください (上記の URL であってるかはわかりませんが)。 文脈を無視して一文を切り出されても、答える方は推測しなければ いけないのでつらいです。たとえば上記の web であれば config で no-rc5 no-idea と指定しているので、このページの作者は RC5 と IDEA の特許について 危惧しているのだなということがわかるわけです。クイズじゃないんです から、はっきり質問したいことを書きましょう。 IDEA については SSL/TLS 上で使えますし、普通に OpenSSL をコンパイル した場合は有効になっています。ただし FreeBSD の OpenSSL では IDEA が 使用できないようにコンパイルされていました。他の厳しめの OS (Debian とか) でも同様かと思われます。SSL/TLS で使用できるようになっているか どうかは % openssl ciphers でわかります。 RC5 は SSL/TLS で使用できる暗号スイートに入っていないので、 問題ないでしょう。 SSL/TLS ではなく、共通鍵暗号方式として IDEA や RC5 を使いたくない (openssl enc -e idea や openssl enc -e rc5 とできないようにしたい) ということであれば、上記のページのようにコンパイルオプションを 設定すればよいでしょう。使用中の OpenSSL で使えるかどうかを知りたい なら % openssl enc -h で表示される Cipher Types を見ればよいです。 なお、サーバ側で制御したいのであれば、Apache などの設定ファイルで http://httpd.apache.org/docs-2.0/mod/mod_ssl.html#sslciphersuite を設定してください。 今後質問される場合は、質問の背景と、何が知りたいのかを明確にする ことをお勧めします。 例: - SSL/TLS クライアントを作っている - 〜というページに〜という記述があり、特許を侵害してしまわないか心配だ。 - クライアント側で特定の暗号を使用しないように制御する方法はあるか? |
RSAもいいけど楕円曲線暗号もね。 というわけで、Rubyで素数位数の群をもつ楕円曲線を生成するスクリプトを組んでみました。 |
まだまだSSLを思考錯誤中です。 「SSL/TLS でアクセスしてみよう (2)」に記載されているサンプルについて 注意して頂きたい事があります。 HTTPSに接続後のサーバ証明書のsubjectとissuerを出力する部分で、 メモリーリークが発生する様です。 具体的には、 132: str = X509_NAME_oneline(X509_get_subject_name(server_cert), 0, 0); と 135: str = X509_NAME_oneline(X509_get_issuer_name(server_cert), 0, 0); の返り値strそれぞれを OPENSSL_free( str )すればメモリーリークは直りました。 OpenSSLのバージョンは0.9.7aです。 OpenSSLドキュメントを見ても該当関数の事が記載されていなかったので 内部でアロケートしているかどうかソースを追っかけないと判りませんでした。 |
>>3882 ニッタン > HTTPSに接続後のサーバ証明書のsubjectとissuerを出力する部分で、 > メモリーリークが発生する様です。 ありがとうございます。 The functions X509_NAME_oneline() and X509_NAME_print() are legacy functions ということなので、X509_NAME_oneline() を使うのはやめて、 X509_NAME_print_ex() に変更しました。XN_FLAG_RFC2253 に したのは特に意味はありません。 # http://x68000.q-e-d.net/~68user/net/ssl-2.html |
ごもっとなご意見です。いろいろ推測させてしまったようです。 すみませんでした。 68userさんの推測とおり、 ・SSL対応のWebクライアントを作っています。 ・(Open)SSLの実装では特定の暗号化ロジックを使わないようしたい。 公開鍵の暗号化としてRSAを使いたいが有効鍵ビットは512としたい 共有鍵の暗号化としてRC4を使いたいが有効鍵ビットは40としたい これまでに以下の情報をご提供いただきました。 1.使用したい暗号化ロジックは SSL_CTX_set_cipher_list()で指定 2.暗号化方式として特定のロジックを使用禁止にしたいのであれば コンパイルオプションを設定すればよい について、有効鍵ビットを意識した設定は可能なのでしょか いろんなサンプルを見ましたが、方式の設定はあっても鍵長まで意識 したものが見つかりませんでした。 また、SSL_CTX_set_cipher_list()での設定は必須になるのでしょうか。 なかなかイメージがわきません。よろしくお願いします。 |
>>3884 jeiu > 公開鍵の暗号化としてRSAを使いたいが有効鍵ビットは512としたい > 共有鍵の暗号化としてRC4を使いたいが有効鍵ビットは40としたい では http://www21.ocn.ne.jp/~k-west/SSLandTLS/rfc2246-Ja.txt の RSA_EXPORT_WITH_RC4_40_MD5 で決まりでしょう。RSA かつ RC4 の 40bit となればこれしか選択肢がありません。 「RSA の鍵長 512bit 以下」という要件についてですが、これは 上記 RFC の 7.4.3. ServerKeyExchangeメッセージ ServerKeyExchangeメッセージは (略) 以下の鍵交換方式で使用される。 RSA_EXPORT (サーバ証明書の公開鍵が512ビットより長いとき) (略) 注: 現在の米国輸出法では、米国から輸出したソフトウェアにおいては、512 ビットより長いRSAのモジュラスを鍵交換において使用してはならない ことになっている。このメッセージを送信した場合、証明書内に含まれ ている512ビットより長いRSA鍵は、RSA_EXPORT鍵交換方式用の、512ビット 以下の長さを持つ一時的RSA鍵に署名するのに使用される。 で自然とクリアできます。 結局、ciphers(1) に SSL_RSA_EXPORT_WITH_RC4_40_MD5 EXP-RC4-MD5 とあるので SSL_connect() の前に if ( SSL_CTX_set_cipher_list(ctx, "EXP-RC4-MD5") == 0 ){ /* error */ } という処理を入れればよいでしょう。 |
68userさんのサイトで勉強させてもらってます。 http://x68000.q-e-d.net/~68user/net/rfc.html こちらのページの、POPの「日本語訳」のところがリンクが失敗してる ようですので、お知らせしておきます。 |
>>3886 kawa > http://x68000.q-e-d.net/~68user/net/rfc.html > こちらのページの、POPの「日本語訳」のところがリンクが失敗してる > ようですので、お知らせしておきます。 修正しました。ご連絡ありがとうございました。 |
自前parseルーチンで以下の様な処理をしています。 foreach(split(/&/, $query)){ my($name, $value) = split(/=/, $_); 〜日本語処理とかお約束の処理〜 # %FORMに格納 if(exist $FORM{$name}){;#既に以前の$nameが有れば(2回目以降) push($FORM{$name}, $value);#@{$FORM{$name}}の配列に格納 }else{ $FORM{$name} = $value;#初めての出現ならば通常通りに格納 } } 細かい部分は省略してますが、例えば checkbox などで、 chbox1&val1&chbox1&val2&chbox1&val3 の様なデータが来た場合、 $ALL_VALUE = $FORM{chbox} . " @{$FORM{chbox}}"; として、 $ALL_VALUE = 'val1 val2 val3' となる事を確認しています。 しかしなぜか、元のデータが複数の時の動作が理解できないのですが、 自分の理解が甘いような気もするので、ぜひとも動作の解説をしもらえない でしょうか? 以下は確認用のサンプルです。2行目のコメントを外して違いを確認ください。 データの内容によって結果が違います。 変数の内容が判りやすいように print 文を入れています。 $query=qq(cbox1=1&cbox1=2&cbox1=3&cbox2=1&cbox2=2&cbox2=3); #$query=qq(cbox1=1&cbox1=2&cbox1=3&cbox2=a&cbox2=b&cbox2=c); foreach(split(/&/, $query)){ my($name, $value) = split(/=/, $_); print qq($name=[$value]\n); if(exists $FORM{$name}){ push(@{$FORM{$name}}, $value); print qq( ->push:<$name>=[$value] count:). $#{$FORM{$name}} . qq(\n); }else{ $FORM{$name} = $value; } } print qq(Result1:[$FORM{'cbox1'} @{$FORM{'cbox1'}}]\n); print qq(Result2:[$FORM{'cbox2'} @{$FORM{'cbox2'}}]\n); 無名配列が $value の内容によって識別できていないように見えます。 Windows版とLinux版のそれぞれ 5.6.1 で確認しました。 |
書き忘れましたが perl でのお話です。 |
>>3888 スナフキン $query=qq(cbox1=1&cbox1=2&cbox1=3&cbox2=1&cbox2=4&cbox2=5); foreach (split(/&/, $query)){ my($name, $value) = split(/=/, $_); print qq($name=[$value]\n); if (exists $FORM{$name}){ push(@{$FORM{$name}}, $value); print "\@{$FORM{$name}}=@{$FORM{$name}}\n"; } else { $FORM{$name} = $value; } } print "\@1=@1\n"; cbox1=[1] cbox1=[2] @{1}=2 cbox1=[3] @{1}=2 3 cbox2=[1] cbox2=[4] @{1}=2 3 4 cbox2=[5] @{1}=2 3 4 5 @1=2 3 4 5 というわけで、最初のループで $FROM{$name} には 1 が入り、 @{$FORM{$name}} はシンボリックリファレンスと解釈され、結局 @1 に push しているわけです。 結局は一度目のループとそれ以降のループを分けず、常に push(@{$FORM{$name}}, $value); すればよいと思いますが、そもそも何をやりたかったのかによりますかね。 |
!!!なんとなるほど!シンボリックリファレンスと解釈されたとは・・・ すばやい回答大変助かりました。ありがとうございます。 このルーチンはいくつかある他のプログラムの一部なんですが、既に$FORM{〜} でアクセスする箇所が沢山有ったので、それらを変更する事なくという部分に こだわりすぎました。 cgi-lib.pl とかを見るとparse時に \0 をセパレータにしてスカラーに入れて いますが、そうではなく同名変数の配列にぶち込んじゃおうと思ったのですが 他の方法をかんがえてみます。 |
超初心者の質問でごめんなさい。 コマンドを入力すると、Command not found って、表示されるんです。 スペルは間違っていないのに。何が原因なのでしょうか? また、コマンドを入力した時に、値段のような文字が、ずらっと表示される事が あります。例:\245\242\245\257\245\273\245\271\270\242\244\254\244\242。 このようなことが起きる原因は、何でしょうか? 対処方法を教えて下さい。お願い致します。 |
>>3892 じぇぃじぇぃ ネット上の文字のやりとりだけで環境を把握するのがちょっと大変そうですが…。 > コマンドを入力すると、Command not found って、表示されるんです。 結論から言うと、path変数が正しく設定されていないのが原因とは思いますが…。 とはいえ即解決には至れないので、まず回答にあたって次を教えてもらえますか? ・コマンドを入力するまでにどんな手順を踏むように指示されている? ・それに対しコマンドを入力するまでに実際にはどんな手順を踏んでいる? ・コマンド名は何? > コマンドを入力した時に、値段のような文字が、ずらっと表示される事があります。 これも次を教えてください。 ・使っている機器はPC? ・WindowsからTelnetやTeraTermなどを実行して開いたウィンドウで起こっている? ・それともPC上では直接Solarisやlinuxが動いていてそこで起こっている? ・機器はPCではなく大学の研究室かどこかのワークステーション? ・機器はワークステーションではなくX端末? なお、この書き込みに関係なくすでに解決した場合でも、何をどうしたらうまく できたのか、必ずここに書き込みしてください。 とりあえず今回は、質問するというだけでも一苦労だったとは思いますが、 回答する側もスムーズかつ効率的に解決する技術を習得しようとしている面も あるので、質問する側としてもその時点でわかっていることをできるだけ きちんと伝えることが大切かと思います。ぜひ実践していってください。 # まあそうは言っても、何が前提で、伝えるべき情報がどれなのかがわからなくて # 余計困っているんだとは思いますが |
ネットワークプログラミングの基礎知識に 「*BSD で kqueue・kevent を使ってみよう」 http://X68000.q-e-d.net/~68user/net/c-kqueue-1.html を追加しました。 >>3892 じぇぃじぇぃ > コマンドを入力すると、Command not found って、表示されるんです。 こちらもご参考に。 http://X68000.q-e-d.net/~68user/unix/pickup?Command+not+found |
has 様。 ご丁寧なお返事ありがとうございます。 ・コマンドを入力するまでにどんな手順を踏むように指示されている? ・それに対しコマンドを入力するまでに実際にはどんな手順を踏んでいる? →サーバーにログインして、プロンプトを表示させる。 (ここまではOK)その後、以下のような操作(コマンドの入力)を 実行しています。 nslookup www.○○○○○○.ne.jp ↓ (見つからない) ↓ find /usr/bin -name nslookup -print ↓ (見つからない) ↓ find /usr -name nslookup -print ↓ (見つからない) ・コマンド名は何? →nslookup ・使っている機器はPC? →Windows Xp |
追記。 ・機器はPCではなく大学の研究室かどこかのワークステーション? →自宅PCです。 ・機器はワークステーションではなくX端末? →ワークステーション・X端末とは何でしょうか?? ほんとに、まぬけな答えをしてたら、ごめんなさい。 よろしくお願い致します。 |
>>3896 じぇぃじぇぃ 困っている内容: Windows XPのPCから[telnet等のソフト]で[UNIX系のOS]マシンにログインし 「nslookup www.○○○○○○.ne.jp」を実行したが「Command not found」 と表示され正しく実行できない([]内は未だ不明)。 さらに教えてください。 1.nslookupが実行できない理由を調べる (ログイン先のマシンにnslookupコマンドが存在するか) (a)OSに依存しない確認 ・ログイン先のマシンはどこのもの?(学校?自宅?レンタル?) ・ログイン先のマシンでnslookupが実行できた人は?できないのは1人だけ? (b)OSを特定してどこにあるか推定 ・「uname -a」の実行結果は? 2.メッセージが正しく表示できない原因を調べる (1)文字コード種類を推定する 「\???」は3桁の8進数であり、質問されたメッセージはEUCと思われる。 (アクセス権があ) (2)リモートマシンでの言語設定を確認する 「env | grep LANG」の実行結果は? なおワークステーション・X端末については、別の機会としましょう。 我慢できなければ是非google等で調べてみてください。 |
>>3895 じぇぃじぇぃ findコマンドでnslookupコマンドを検索されたようですが、 ここでの「見つからない」は、findコマンドが見つからなかったのか findの結果、nslookupが見つからなかったのか判らないですね。 こういう場合は、実行ログを貼り付けた方が伝わり易いですよ。 |
68user殿 ご回答ありがとうございます。返事がおくれて失礼しました。 しつこいようですがまた質問をさせてください(これで最後にします)。 教えていただいた暗号スイートですが、SSL_CTX_set_cipher_listで 複数指定はできないのでしょうか(リストというからには複数できるような...)。 |
>>3899 jeiu > SSL_CTX_set_cipher_listで複数指定はできないのでしょうか できます。マニュアル読んでますか? >>3880 68user で複数指定する例をあげていますし、さらにそこで > 書き方は OpenSSL のマニュアル ciphers(1) に載っています。 とも書きました。ciphers(1) には The cipher list consists of one or more cipher strings separated by colons. とあります。 なのにこういう質問が出てくるのはなぜですか? |
不要かもしれませんが結果報告です。 受け取ったデータを一次ファイルに格納して再読み込みする仕組みだったので、 配列に格納せず他のデータをタブで区切って追加させて、再読み込み時に my($name, $value)=split("\t", $record, 2); と split オプションを追加して、複数のデータを処理させましました。 cgi-lib.pl では \0 で、この掲示板では "," で区切っているので、別の方法を と思いましたが、変更箇所を最小限にするために結局この形にしました。 リファレンスは苦手なんで敬遠してましたが、これをきっかけにまじめに勉強 しようと思います。助言ありがとうございました。 |
68user殿 失礼しました。 日本語訳のページをのぞいていました。 「コロンで分離する」と理解しました。 |
こんにちは暑中お見舞い申し上げます。 覚えているかどうかは分かりませんが 今から7年前くらいにNETで多大な迷惑を おかけしたものでございます。当時CGIって何ですか? とか言っていた私も今では大手プロバイダでシステム いじってたりします・・・。玉に誰にも聞けない初歩的(?) な事があると、何故か68user様のサイトを参考にしてしまい 頭をすっきりさせているしだいであります。ずっと変わらず 存在しているサイトというのは私にとってとても貴重な物でして 上手く言えなくて申し訳ございませんが どうもありがとうございます。これからも利用させていただきたく存じます。 掲示板の書き込み内容としてそぐわないのは重々承知でございますが 他にコンタクトをかける手段を持ち合わせておりませんもので ご迷惑をおかけいたします。 失礼いたします。ニンニン。 |
>>3903 かりり お久しぶりです。お元気そうでなによりです。SEGA BBS で 遊んでたのは 7年も前なんですねぇ。 > CGIって何ですか? は忘れましたが、「タバコを吸って地球温暖化になったらどう するんですか?」と言われて困ってしまったのはよく覚えています。 IT 関連の職につかれましたか。ちなみにわたしは SE なのか プログラマなのかよくわからんのですが、とりあえず Perl や C や Oracle や Pro*C や PL/SQL や Java などと たわむれる 毎日です。 「ここが間違ってる」というご指摘や「もっとここを詳しく説明しろ」 とかいうリクエストがありましたら、遠慮なくどうぞ。 |
「UNIX の部屋」 http://X68000.q-e-d.net/~68user/unix/ を更新しました。 |
>>3892 じぇぃじぇぃ その後いかがでしょうか。 >>3893 has にも書いたとおり、他の人に聞いてなんとかなったのならそれはそれで まったく構わないのですが、何をどうしたかの報告が欲しいんです。 |
HP-UX11.00でPerlでシェルスクリプトを書いています。 Perl4なのですが、Perlでの置換について教えてください。 不等号で囲まれた文字列「<aaa.bbb@test.co.jp>」から 不等号だけを取り除いた文字列を取り出したいのですが 上手くいきません。 -------------- #!/usr/contrib/Q4/bin/perl # $addr="\<aaa.bbb\@test.co.jp\>"; $addr=~ s/<//g; $addr=~ s/>//g; print "$addr\n"; exit 0; ---------- この場合だと、置換処理を2回行わなければなりません。 1回で終わらせたいのですがごうすればよいでしょうか。 -------------- #!/usr/contrib/Q4/bin/perl # $addr="\<aaa.bbb\@test.co.jp\>"; $To=~ s/([^<>]?)+?/$1/g; とか $addr=~ s/^<([^<>]?)+?/$1/g; exit 0; ---------- |
>>3907 さいさん > HP-UX11.00でPerlでシェルスクリプトを書いています。 Perl で書いたスクリプトは Perl スクリプトと呼びます。sh や csh などのシェルが解釈するスクリプトがシェルスクリプトです。 > 1回で終わらせたいのですがごうすればよいでしょうか。 perl4 で動くかどうかはわかりませんが、perl5 では以下の どれを使ってもうまくいきました。 $addr =~ s/(^<|>$)//g; $addr =~ s/[<>]//g; $addr =~ s/^<(.*)>$/$1/; $addr =~ s/<(.*)>/$1/; |
いつもこのHPにお世話になっている者です。 この6月に会社の社内ネット担当になり、NW1年生になりました。 今はコマンドプロンプトやらTelNetをいじりながら勉強中です。 今日も自宅に戻ってから、 Windows98環境のコマンドプロンプトでパチョパチョ叩いて勉強していました。 画面がスクロールできなく小さいなと思い、 ツールバーの画面最大化ボタンを押してみたら、大変なことに!! 最大化の画面からツールバーが表示できる術を知らず、画面が戻らなくなりました。 EXITで一度ログアウトしてから再立上してみたのですが、 最大画面のままで、、 元の画面に戻すコマンドや、又はコマンド指示以外に元に戻す方法を教えて下さい。 どうぞ宜しくお願い致します。 |
Windows には詳しくないので「コマンドプロンプト 最大化 戻す」で 検索したところ、 http://forum.nifty.com/fpcu/top/doslog01/0896.htm > 通常、Alt+Enter(Altキーを押しながらEnterキーを押す)で戻ります。 だそうです。試してみてください。 |
alt+enterはコマンドプロンプトというよりも 最大化した状態のアプリケーションを戻すようなイメージで使えます。 |
>>3908 68user >> 1回で終わらせたいのですがごうすればよいでしょうか。 >perl4 で動くかどうかはわかりませんが、perl5 では以下の >どれを使ってもうまくいきました。 > $addr =~ s/(^<|>$)//g; > $addr =~ s/[<>]//g; > $addr =~ s/^<(.*)>$/$1/; > $addr =~ s/<(.*)>/$1/; Perl4でも上記のどれを使っても上手くいきました。 |
はじめまして 最近、UNIXをさわるようになって、勉強中の身です。 このページでいろいろ勉強させて戴いています。 クーロンの設定で教えて頂きたいのですが、 (1)0 0 * * * /opt/cs/bin/logdel.sh > /dev/null 2>&1 (2)0 0 * * * /opt/cs/bin/logdel.sh > /dev/null (1)と(2)の動作の違いは、なんのなのでしょうか? 標準出力と標準エラー出力の部分を調べたのですが、イマイチ 理解できていません。 こんな質問で申しわけないのですが、ご教授願います。 |
はじめまして。 Apacheについて質問といいますが疑問なのですが、mod_sslを使用してssl化した場合 と、そうで無い場合で、Apache(厳密にはブラウザからの表示)が極端に遅くなると 言うことは考えられるでしょうか? 現在はDebian GNU/Linux にてApt-getでインストールしたApacheを使用している のですが、Solarisにソースコードからmod_sslを使用してssl化したApacheを 導入したところ、ローカルからの表示が極端に遅くなりました。(表示に1分以上かかる) Debian GNU/Linuxで使用時と最も違う点はssl化した点と、VirtualHostの数を2つから 4つに増やしたことの2点なのですが、あまりに遅いためお尋ねする次第です。 Solaris側のApacheはSSLを有効にしての起動ではありません。 環境は以下になります。 Debian GNU/Linux(woody)+Apache(apt-getにてインストール) Solaris9_x86+Apache1.3.31+mod_ssl 基本的に両方ともDSOを有効にし、現在は全く同じモジュールをロードして使用して います。httpd.confはVirtualHostの記述、およびSolaris側にはssl関連の記述が ある以外はほぼ同じと思われます。 また、errorlogを確認したのですが、特になにも記述はありませんでした。 何か情報等ございましたらお教えいただきたい次第です。 |
はじめまして。。 簡単かもしれませんが是非、識者の方のご助言をお願いします。 AIX4.3.2でlhaコマンドを利用出来るようにしたいのですが 方法を教えて下さい。 AIX4.3.3では利用できるものを見つけたのですが、、、 宜しくお願いします。 |
はじめまして。 68user様のPerlでFTPクライアントを作るページを参考にさせていただき、 FTP転送するプログラムを書いたりしています。 その中でFTPコマンドの NLST のレスポンスで 550 が返ってくるかどうかで ファイル存在チェックなどしたりしているのですが、 最近、OSをLinuxのRedHat7JからRedHat9へ変えた所、 FTPサーバが vsftpd-1.1.3-8 になり、NLST の結果が 5 で始まらない結果しか 返って来なくなりました。 Windows2k付属ftpのデバッグモードでサーバレスポンスを見ると次のような感じです。 ftp> ls aaa ---> PORT ###,###,###,###,###,### 200 PORT command successful. Consider using PASV. ---> NLST aaa 150 Here comes the directory listing. 226 Directory send OK. ftp> ※aaaは適当な存在しない適当なファイル名です。 これを見る限り vsftp サーバ側の反応が前と異なるということですよね。 この為ファイルの存在チェックができなくなってしまいました。 私の思いつく対策としては、 1.レスポンスコード(550)で判別ではなく、データポートに入ってくる値で存在チェックに変える。 2.NLST でなく quot SIZE や quot MDTM で判定(この場合 * ワイルドカードが使えなくなります) 3.vsftp のソースから変えてコンパイルする。 (該当個所がみつかるかどうか、変えて他に影響がないかどうかが問題です) 4.wuftp に戻す。 やっぱりワイルドカードは使いたいので4が一番手っ取り早いでしょうか。 サーバ側のconfファイルの設定などで前のNLSTのレスポンスに戻せたら一番いいのですが、 マニュアルを見た感じでは無理そうですし(英語は苦手なので間違いがあるかもしれませんが) サーバのレスポンスが変わってしまった理由や本来はどうあるべきなのかなど なんでもいいですので、この件についてご意見をお聞かせ願いたいと思います。 よろしくお願いします。 |
早速ご返答頂きまして、まことに有り難うございます。 実行したところ、最大化した画面が戻りました。 (もう一回実行すると最大化しました。) とても助かりました有り難うございます。 これからも宜しくお願い致します。 -------------------------------------------------------------------------------- No. 3911 # sorame 2004/08/04 (水) 00:56:13 alt+enterはコマンドプロンプトというよりも 最大化した状態のアプリケーションを戻すようなイメージで使えます。 -------------------------------------------------------------------------------- No. 3910 # 68user 2004/08/03 (火) 23:07:49 Windows には詳しくないので「コマンドプロンプト 最大化 戻す」で 検索したところ、 http://forum.nifty.com/fpcu/top/doslog01/0896.htm > 通常、Alt+Enter(Altキーを押しながらEnterキーを押す)で戻ります。 だそうです。試してみてください。 |
>>3913 初心者 > (1)0 0 * * * /opt/cs/bin/logdel.sh > /dev/null 2>&1 > (2)0 0 * * * /opt/cs/bin/logdel.sh > /dev/null (1) は標準出力と標準エラー出力を /dev/null に捨てます。 (2) は標準出力だけ /dev/null に捨てます。 cron とからめて考えると、(実装にもよるでしょうが) 標準出力に 出力されたものはメールで通知、標準エラー出力への出力はログに 記録されるので、メールで通知せず、ログにも記録しない場合は (1) がよいでしょう。 なお、> /dev/null 2>&1 は 1>/dev/null 2>&1 と等価であり、 - 2>&1 で 2 (標準エラー出力) を 1 (標準出力) に - 1>/dev/null で 1 (標準出力と標準エラー出力) を /dev/null に と考えるとわかりやすいかもしれません。 >>3914 立神梢一 とりあえず Solaris9_x86+Apache1.3.31 だけで試してみるべきでしょう。 もしそれが遅ければ名前解決が原因かも、などと切り分けられるので。 後は LogLevel や SSLLogLevel を debug にして、どこで止まっているのか 確認してみるのもよいかもしれません。 >>3915 いはら > AIX4.3.2でlhaコマンドを利用出来るようにしたいのですが よくわかりませんが、AIX4.3.3 の lha はどうやって入手したのですか? AIX は知りませんが、フリーソフトのバイナリを配布しているサイトが あるのならそこから入手、なければソースからコンパイルとなるでしょう。 http://www.infor.kanazawa-it.ac.jp/~ishii/lhaunix/ というのがありますが、どの程度信用できるサイトなのかはわかりません。 >>3916 コノテガシワ > FTPサーバが vsftpd-1.1.3-8 になり、NLST の結果が 5 で始まらない結果しか > 返って来なくなりました。 > サーバのレスポンスが変わってしまった理由や本来はどうあるべきなのかなど わかりません。ftp は実装依存部分が多く、どれが正しいのか悩む部分は多いで しょうが、調べてみても明文化された規格が存在しないというケースが多く、 わたしは深く考えないように努めています (世の ftp クライアントの作者の 方々はよくやるよなぁと感心します)。 例えば最近の ProFTPD なぞ NLST のオプションを弾くようになりましたし。 http://www.miloweb.net/pastbbs/0008/2281.html 対処は目的にもよりますが、汎用的なつくりを優先させるなら レスポンスコード (550) で判別し、もしエラーでないならデータポートに 入ってくる値で存在チェックする がよいと思います。自分用のお手軽ツールで、とりあえず動けばいいや的な考えで あれば、それこそ一番お手軽と思う方法がよろしいかと。 |
>> 3918 ご返答ありがとうございます。 他のサイトでもFTPクライアントのトラブルも拝見してきました。 どうやらサーバによって NSLT に使えるパラメータやそのレスポンスが違うのは、 RFC に定められた動き以外は FTPD(サーバプログラム)独自の+α機能 ということのようですね。(違っていたらご指摘下さい) だから、クライアントを作る人も応用が利くように 色んなサーバを調べて対応した方が良い物が出来るということですね。 今回の場合、実はあるプロジェクトの開発用のマシンでの話でした。 開発環境だから本番と同じにした方がいいかもしれない・・・ でも、今後のことを考えると新しいOSで新しいFTPサーバでも 対応した存在チェックが出来るようにした方がいいかもしれない・・・ と少し悩んでいました。 今回の場合、それほど汎用的な作りを重視する必要は無いのですが、 自分の技術向上のためにも汎用的な作りにする方向で検討してみます。 ありがとうございました。 |
回答ありがとうございました。 > > AIX4.3.2でlhaコマンドを利用出来るようにしたいのですが > よくわかりませんが、AIX4.3.3 の lha はどうやって入手したのですか? レスして頂いた内容のサイトより入手しました。 > AIX は知りませんが、フリーソフトのバイナリを配布しているサイトが > あるのならそこから入手、なければソースからコンパイルとなるでしょう。 > http://www.infor.kanazawa-it.ac.jp/~ishii/lhaunix/ > というのがありますが、どの程度信用できるサイトなのかはわかりません 頑張って捜してみます。 |
ご回答ありがとうございました。 >>とりあえず Solaris9_x86+Apache1.3.31 だけで試してみるべきでしょう。 ですよね。 ただ、現在のところどうもDNS関連での名前解決の問題っぽいです。 ローカルではDNSを立てていないため、その辺も関連しているのかなという感じです。 クライアントマシンをサーバーのhostsファイルに記述していないのでそれも無関係で はないかもというところです。 というわけで現在作業中です。解決もしくは問題の切り分けができましたら、 またご報告に参上したいと思います。ありがとうございました。 |
はじめまして、少し教えて欲しいのですが、ルータの設定画面などにアクセスする際にポップアップで 表示される認証を自動的に行えないでしょうか?少し古いルータを使ってまして、接続先を自動的に切 り替えるプログラムを作りたいのですが。 |
初めまして。質問があります。 僕は掲示板で書き込みをしていたら、まったく同じIPの方がいて、その方にとっても ご迷惑をかけてしまいました。 そこで質問です。 同じIPがあるのって、不可能なんですか?? |
初めまして。UNIXのみならず、ネットワークについて色々お世話になってます。 NW内で近いコンピュータと通信するというエニーキャストアドレスが在りますが、 何を以って【近い】というのか解りません。 部の勉強会で、近いとは遅延のことか?と発言したところ、 次回発表に「CSMA/CDのキーワードで、NW内近いというものを発表しろ」と 課題が出されました。 調べたところ、CSMA/CDの他、CSMA/CA、ホットポテトルーティング、近隣探索機能(v6)等々出てきました。 しかし、何を以って近いと言うのか、よく解っていません。 ・NW内で【近い】とは何か? ・CSMA/CD、CSMA/CA、ホットポテトルーティング、近隣探索、がどのような仕組みか? 上記について、参考になる資料やサイトがあれば是非とも教えて下さい。宜しくお願い致します。 |
どうも初めまして。ネットワークプログラミング始めたばかりの者です。 ちょっと前までは決まりきったものだと特に気に止めずに流していたのですが、 connect()関数の第2引数が connect(sockfd, (struct sockaddr *)&servaddr, sizeof(servaddr)) というふうに普通していますが、どういう意味なんでしょうか? servaddrのアドレスさえ渡してやればいいように思うのですが。(ん?その前にC言語の 文法がまだ完全に理解できていなのかも?)servaddr構造体のアドレスをsockaddr構造体 のポインタでキャストしてる?なんかよく分かりません。 助言をお願いします。 |
>>3922 社長の猿 おそらく BASIC 認証と呼ばれるものだと思いますので、 >>2612 68user を参考にしてください。 >>3923 優 proxy サーバを経由しないと学校や会社の外に出られない環境とか (proxy サーバの IP アドレスは 1つ)、一度 IP アドレスが割り当て られたものの、しばらくアクセスしなかったので他の人に同じ IP アドレスが割り当てられた、という可能性があります。 >>3924 ネットワーク1年生 わたしはネットワークの仕組みはよく知らないのですが、 > CSMA/CDの他、CSMA/CA、ホットポテトルーティング、近隣探索機能(v6) CSMA/CD・CSMA/CA は近いという概念とはまったく関係なく、LAN 内での コリジョンを防止するための仕組みだと思っています。 http://e-words.jp/w/CSMA2FCD.html http://e-words.jp/w/CSMA2FCA.html ホットポテトルーティングはわかりません。Anycast もよくわかりませんが、 どこが違いかどうかはルータが判断するものではないかなぁと思っています (末端のアプリが判断する必要はない)。で、ルータがどういう基準で近さを 判断しているかはわかりません。 >>3925 hex > servaddrのアドレスさえ渡してやればいいように思うのですが 根本的にはその通りです。ただ、connect(2) は struct sockaddr_in の アドレスを受け取ったり (インターネットのアドレスの場合)、struct sockaddr_un のアドレスを受け取ったりしなければいけません (UNIX ドメインのアドレスの場合)。 しかし C 言語ではいろいろな型を受け取る関数を作ることはできないため (Java や C++ のように関数のオーバーロードができないため)、struct sockaddr という汎用的な構造体を定義し、それにキャストすることで connect(2) に struct sockaddr_in も struct sockaddr_un も渡せるようにしています。 まぁ C の言語上の制約を回避するための汚い手ですね。コンパイラに警告を くらってもいいなら、キャストなしでも動くと思います (C++ でなく C を使って いるならば)。 |
>>3921 立神梢一 だいぶ時間が空いてしまいましたが、sslをはずしてコンパイルしてみましたが 変化なく、その後名前解決をもう一度見直したところどちらの状態(ssl有り/無し) でも問題ない速度で動作しました。やはり名前解決周りだったようです。 ご報告が遅くなりました。ありがとうございました。 |
/etc/passwdファイルからグループIDがゼロになっているユーザを出力する場合、 「grep ':00*:' /etc/passwd」とすると rootだけが以下のような内容で引っかかります。 「root:x:0:1:Super-User:/:sbin/sh」 しかし、何故これがひっかかるのかがわかりません。 grepの条件で「:00*:」としているのに、なぜこれを含んでいないrootの 行がひっかかるのでしょうか?ご存知の方、教えていただけませんでしょうか。 OSはSolaris7を使用しています。 |
/etc/passwdファイルからグループIDがゼロになっているユーザを出力する場合、 「grep ':00*:' /etc/passwd」とすると rootだけが以下のような内容で引っかかります。 「root:x:0:1:Super-User:/:sbin/sh」 しかし、何故これがひっかかるのかがわかりません。 grepの条件で「:00*:」としているのに、なぜこれを含んでいないrootの 行がひっかかるのでしょうか?ご存知の方、教えていただけませんでしょうか。 OSはSolaris7を使用しています。 |
>>3929 yoshitani > grepの条件で「:00*:」としているのに :00*: は、 コロンがあって、その後に 0 があって、その後に 0個以上の 0 があって、その後にコロンがある という正規表現ですので、 > 「root:x:0:1:Super-User:/:sbin/sh」 の :0: の部分にマッチします。 GID が 0 のものを引っ張りたいなら、 % grep ':[0-9][0-9]*:0:' /etc/passwd % awk -F: '$4~/^0$/ {print}' /etc/passwd などとすればよいかと思います。 |
>>3924 ネットワーク1年生 ネットワーク的に近いとは同一ネットワーク内のことを指します。 まぁ、普通ならルーターを挟まない通信と言うこと |
>>3930 68user ありがとうございました。 正規表現、もっと勉強してみます。 |
はじめて書き込みをさせていただきます。たろーと申します。 OpenSSLで単純なHTTPSクライアントのプログラミングをしているのですが、 SSL_connect(ssl)関数のタイムアウトの設定の仕方がわかりません。 もしご存知でしたら、教えていただけないでしょうか。 宜しくお願いします。 |
>>3933 たろー > SSL_connect(ssl)関数のタイムアウトの設定の仕方がわかりません。 関数名しか見てませんが SSL_set_timeout や SSL_CTX_set_timeout じゃ ないですかねぇ。ぜひ結果を教えてください。 |
こんばんは。TSURUです。 久しぶりです。 また、皆さんのお力を貸して欲しいと思います。 sendmail を久しぶりにコンパイルしようとしたのですが、 以下のようなメッセージが大量に出力されてしまい、コンパイル できません。 unknown flag -lang-c unknown flag -Asystem(unix) unknown flag -Asystem(svr4) unknown flag -Acpu(sparc) unknown flag -Amachine(sparc) 環境は、以下のとおりです。 OS : Soraris 2.5.1 sendmail : sendmail-8.12.11 以前は問題なくコンパイルできていたのですが、久しぶりに実行したら、いきなり コンパイルできなくなってしまいました。環境は、以前と特に変えていません。 コンパイラは gcc ですが、かなり古いです。 % l /usr/local/bin/gcc -rwxr-xr-x 1 root other 118928 9月 1日 1996年 /usr/local/bin/gcc* コンパイラが古いとコンパイルできなくなるということはあるのでしょうか? ちなみに、sendmail だけでなく、UW-IMAP など他の製品をコンパイルしようとした 時にも、同様な現象となります。 gcc が正しくインストールされていないのが原因なのでしょうか?(だとしても、 以前は正常にコンパイルできていました。) どなたか、解決方法を教えていただきたいと思います。 よろしくお願いします。 |
以下のカンマで区切られたデータをフィールド1をキーにして、フィールド3を 1行に編集しようとしたのですが、処理が終了してくれません。 無限ループの状態になってしまいます。 上手くファイルの終了を判断していません。 ファイルの終わり(EOF)を判断するにはどうしたらできますか。 --データ-------------- A001,商品番号,0001 A001,商品番号,0002 A001,商品番号,0003 A002,商品番号,0001 : : Annn,商品番号,0001 Annn,商品番号.0002 --結果-------------------- A001,0001,0002,0003 A002,0001 : : Annn,0001,0002 ---------------------------------- #!/bin/sh # SORT_FILE="/tmp/sort_csv.log" OUT_FILE="/tmp/kekka.log" rm ${OUT_FILE}* > /dev/null 2>&1 echo "*** start ***" awk -v OUT=${OUT_FILE} -F"," ' BEGIN { count = 0+0 ; output=sprintf("%s",OUT) ; } function edit_proc() { cnt = 0+1 ; dumy = $1 ; printf("%s",$1) >> output ; while( NF>0 ) { if (dumy != $1) { printf("\n") >> output ; dumy = $1 ; printf("%s",$1) >> output ; cnt++ ; } printf(",%s",$3) >> output ; getline ; } printf("\n") >> output ; return cnt ; } { count=edit_proc() ; } END { close(output) ; printf("syori count [ %d ] ken\n",count) ; }' ${SORT_FILE} echo "*** end ***" |
>>3931 MERCY MERCYさま。ご回答有り難うございます。お礼が遅くなってごめんなさい。 これからもその他、下らないことで質問すると思われますので、 是非とも宜しくお願い致します。 有り難うございました。 |
>>3926 68user 管理者さま。大変お世話になっております。 くだらない質問にも、いつも一番にご回答下さり大変嬉しいです。 本当に有り難うございます。 >> CSMA/CDの他、CSMA/CA、ホットポテトルーティング、近隣探索機能(v6) >CSMA/CD・CSMA/CA は近いという概念とはまったく関係なく、LAN 内での >コリジョンを防止するための仕組みだと思っています。 はい。まさにその通りでした。。 課題を出した上司はNWがどの様に通信しているのかを勉強させたく、 CSMA/CD・CSMA/CAの課題を持ち出したものでした。 コリジョン防止がNW内通信の速さだと思っていた先輩が誤って、 「NW内の近さ」と関連付けアドバイスしてくれたものですから混乱してました。 「UNIXと言うものが、サーバ向が主体」とどこかで思っているので、 こちらでNWの質問までしてしまって申し訳けございませんでした。 とにかく本当に有り難うございました! |
はじめまして。 よろしくお願いいたします。 現在HP-UX11.00、Bシェルでログの監視ツールを作っています。 早速質問させていただきたいのですが、 たとえば、以下のようなログがあったとします。 ------------------------------------------ 1:I have a error. You have a worning. 2:I have a worning. You have a error. ------------------------------------------ 変数にワイルドカードを使用して ------------------------------------------ pattern="*error*worning*" ------------------------------------------ とパターン定義しておいて、ログファイルを一行ずつ読み込み この場合ですと、一行目のみ出力させるということは可能でしょうか? 現在 ------------------------------------------ message=`echo $line | sed -n /$pattern/p` if [ "x$message" = "x" ] ; then exit 0 else echo $message exit 1 fi #($lineはログファイルの読み取り行) ------------------------------------------ というようなことが、やりたいのですが、うまくいきません。 ご教授のほどお願いいたします。 |
>>3936 一人 こんな感じでどうですか? ------ awk 'BEGIN { FS=","; dummy=""; } { if ( $1 != dummy ) { if ( NR > 1 ) printf "\n"; printf "%s,%s",$1,$3; dummy=$1 } else { printf ",%s",$3 } } END { printf "\n"; }' infile ------ >>3939 カトウ pattern='.*error.*worning.*' では駄目ですか? |
>>3940 zsh ありがとうございます。 上手くいきました。 こんな簡単な方法でできるのですね。 考えすぎですね。 |
>>3935 TSURU > sendmail を久しぶりにコンパイルしようとしたのですが、以下のような > メッセージが大量に出力されてしまい、コンパイルできません。 http://mm.apache.or.jp/pipermail/apache98-99/1999-August/001431.html のスレッドを参考にしてください。 gcc をインストールしなおさないといけないのか、PATH の設定次第で何とか なるものなのかはわかりません。 > コンパイラが古いとコンパイルできなくなるということはあるのでしょうか? あります。しかし今回は環境の問題でしょう。 >>3939 カトウ > message=`echo $line | sed -n /$pattern/p` 質問内容とは関係ありませんが、$line にワイルドカードなどが入っていると シェルが展開してしまうので、ログ内容をシェル変数に格納するやり方はお勧め しません。 |
始めまして、こんにちは。 UNIX講習を受けてから5年以上も経つのに、ほとんど初心者です。 基本的な質問ですみません。 tar xvf *.tar で展開して、ファイル情報を表示させたとき、 その内容をファイルに落とすにはどうしたらいいでしょうか? この展開ですべてのファイルがきちんと展開されたか確認したいのです。 (実は1つだけ展開されていない・・・) 本当に、基本的な質問ですみません。 よろしくお願いいたします。 |
初めまして。ポチ公と申します。 ネットワークの勉強中ですがちょっと質問があります。 今、httpの仕組みを勉強中でこちらのサイトにたどり着きました。 以下のページで公開されているtcpdump-filter.plで ttp://x68000.q-e-d.net/~68user/net/tcpdump.html 書かれていたとおりに実行して 見事パケットが整形されて表示されました。 以下のようなコマンドです。 tcpdump -l -s 1600 -x -i lo0 | tcpdump-filter.pl | grep http >> packet.txt xxx.com/ HTTP/1.0 Accept: image/gif, image/x-xbitmap, xxx.com/ HTTP/1.0 Accept: image/gif, image/x-xbitmap, xxx.com/ HTTP/1.0 Accept: image/gif, image/x-xbitmap, zation Required ... それで思ったのですが、どうもログを見ると 先頭の3行くらいが全て省略されているようでした。 環境はredhat9/perl5.8です。 何故、先頭の数文字が省略されているのが 疑問でしたので、投稿してみました。 もし何か解りましたら教えて頂けたら幸いです。 宜しくお願いします。 |
>>3943 初心者? > tar xvf *.tar > で展開して、ファイル情報を表示させたとき、 > その内容をファイルに落とすにはどうしたらいいでしょうか? tar xvf *.tar > out.txt 2>&1 (sh・bash の場合) tar xvf *.tar >& out.txt (csh・tcsh の場合) とします。ただ、 > この展開ですべてのファイルがきちんと展開されたか確認したいのです。 という目的であれば、 - v オプションをつけない。これで何か出力されれば それはエラーメッセージのはず。 - tar のステータスコード ($? や $status) を確認。 エラーが発生しているならステータスコードが 1 以上のはず。 という手もあります。 >>3944 ポチ公 > それで思ったのですが、どうもログを見ると > 先頭の3行くらいが全て省略されているようでした。 すいません、ちょっと時間と気力不足により、スクリプトの 確認は後日行います。申し訳ないです。 もし正しい出力がほしいなら、tcpdump の -X オプションを 使うとか (Ethernet フレームまで出力されてしまいますが)、 ethereal や ethereal に付属する CUI の tethereal の使用を 検討してみてください。 |
「ネットワークプログラミングの基礎知識」の「リンク集・参考書籍」に OpenSSL - 暗号・PKI・SSL/TLS ライブラリの詳細 を追加しました。 http://X68000.q-e-d.net/~68user/net/link-book.html#4274065731 去年頃から、OpenSSL に一番詳しい日本語の解説を書くことを 目指してがんばってきましたが、夢破れました。この本がもっと 前に出ていれば、あんなことやこんなことで悩む必要はなかった のに、と理不尽な怒りすら覚えます。 今後は OpenSSL に一番詳しい日本語のサイトを目指すことにします。 |
お初です。 最近このHPにも大変お世話になってます。 組み込みLinuxでクレジットカードリーダーを試作することになり、 PPPでインターネット経由でサーバと通信するって感じです。 手順その他は私に任せられてたので、独自のプロトコルを考えるのが 面倒だし、ゆくゆくはセキュリティーも対策しないといけないので サーバ側をApache+modsslを使うことにしたのですが、このサイトの情報が 非常に参考になりました。クライアントソフトを解説してあるサイトは 非常に少ないので、大変助かります。 SSLサーバ認証なしで、実験ソフトが動作するところまでは行きました!! でも私のカードを使ってインターネット経由ってのは、まだ怖いので、 クライアント認証に挑戦したいと思います。 そんな記事を書かれるご予定はありませんか?(^^; (クライアント側でクライアントの証明書をリストに追加するだけの ような気がしてますが・・・) これからもがんばってください。 |
>>3947 だんだん 書く気はありますが、もし書く場合は「クライアント認証とは何か」 から始めるつもりなので、いつ書きあがるかは何ともいえません。 要は SSL_CTX_use_certificate_chain_file() などを使ってクライ アント証明書を使えばいいわけですが、詳しいやり方は >>3946 68user の本に書いてあります。 また、概念からして怪しい場合は、 - 自前で CA (認証局) をたてる - クライアントが CSR (証明書発行要求) を作成する - それを受けて CA が証明書を発行する - IE などのブラウザに証明書を組み込む としてまず理解を深めることをお勧めします (ここらへんの手順は 検索すればたくさん見つかります)。 |
はじめまして。 UNIX の部屋 -> コマンド -> cpp にて、 型の別名の定義方法で typedef MYCHAR_P char *; が正しいと紹介されていますが、これは typedef char *MYCHAR_P; の間違いではないでしょうか? |
>>3949 T.Kobayashi > typedef char *MYCHAR_P; > の間違いではないでしょうか? ごもっともであります。修正しました。 http://X68000.q-e-d.net/~68user/unix/pickup?cpp ご指摘ありがとうございました。 |
はじめまして。 いつもコマンドの参考にさせて貰っております。 説明している数や例がわかりやすくて重宝してます。 大した事ではありませんが、気になった部分を2点ほど ■いずれも【TOP >> UNIX の部屋 >> ジャンル別コマンド一覧 >> vi】にて 1.「h 1文字左に移動」がリストからはみ出ています。 2.「編集モード中に"ESC"」=「編集モードに移行」 であれば、リストに入れてはいかがでしょうか。 リストにあれば、閲覧2度目以降の人はそれだけ参考にすればよいので見やすいかと。 (個人的にですが) |
はじめまして。 ソケット通信について教えてください。 Severプログラムでクライアントから ConnectしてきたクライアントがClose処理を行ったかわかりますでしょうか? Connect時は、接続元のIPアドレス・ポートがわかると思いますが クライアントがCloseを行ったかどうかを知りたいのですが? よろしく御願いいたします。 |
>>3951 ほんたか ご意見ありがとうございます。 > 1.「h 1文字左に移動」がリストからはみ出ています。 これは HTML 生成スクリプトの不具合で、認識しているの ですが、美しい直し方はないかなぁと考えているところです。 いましばらくお待ちください。 > 2.「編集モード中に"ESC"」=「編集モードに移行」 > であれば、リストに入れてはいかがでしょうか。 ごもっともです。そのように修正しました。 http://X68000.q-e-d.net/~68user/unix/pickup?vi >>3952 shima > ConnectしてきたクライアントがClose処理を行ったかわかりますでしょうか? 簡単に言うと (shutdown の存在を除外して言うと)、サーバが read してクライアントから 0 か SIGPIPE が返ってこれば、 クライアントが close を行ったか、クライアントプログラムが 終了した (close or exit or core dump) ということです。 ただしクライアントのマシンが落ちたり、ネットワークケーブルが 切断された場合は… read が ETIMEOUT を返すんでしたっけ? この辺 あやふやなので、間違ってたらご指摘ください>誰となく |
初めまして、 ここのサイトの主旨にあった質問かどうかわからないのですが、 質問させて頂きます。 今、開発作業を以下の構成で実施しているのですが、 Webサーバ:Netscape-Enterprise/3.6 SP3 ブラウザ:Internet Explorer 5.5 SP2 Internet Explorer 6.0 言語:Server Side JavaScript(Livewire) ※サーバ側で動作するJavaScript言語です。 正常にHTML画面が表示されているのに、 パケットの最後に、"400 Bad Request"が入ってしまい、 次の画面で、 "あなたのブラウザがサーバに送ったリクエストはサーバが理解できないリクエストです" のエラー画面が表示されてしまいます。 この現象は必ず発生するわけではなく、 2人のひとが同時に同じ作業をした場合にも、 片方の人は発生し、もう片方の人には発生しないことがあります。 (パケットの例) : </HTML> HTTP/1.1 400 Bad Request Server: Netscape-Enterprise/3.6 SP3 ............ ただ、この問題は Netscape Navigater Ver7.1 では発生せず、 また IE の設定を、 「HTTP 1.1を使用する」 → 「HTTP 1.1を使用しない」 に変更するとこちらも問題が発生しなくなります。 そして、telnet を使用しリクエストした場合には、 必ずこの形(Bad Request)で出力されています。 プロトコルかNetscapeサーバが原因と考えているのですが、 うまく問題を切り分けることができません。 わかるかたがいましたら、すみませんがご教授願います。 |
> 3948 . 68user > 要は SSL_CTX_use_certificate_chain_file() などを使ってクライ > アント証明書を使えばいいわけですが、詳しいやり方は あっさり動作しました。 ご指摘ありがとうございます。 |
>>3954 則巻せんべい そういう事象は知らないので何とも言えませんが、とりあえず ethereal などで IE5.5 と NN7.1 のそれぞれのリクエストと レスポンスを観察してみることをお勧めします。 |
お久しぶりです。 その節はお世話になりました。 現在、再びSSLの改造に着手しています。 OpenSSLを使用してクライアントからサーバに HTTP KEEP ALIVE(パーシステントコネクション)を行いたいのですが、 上手く行きません。 HTTPリクエスト時に Getで最初と異なるHTMLファイルを指定し、 Connection: Keep-Alive を要求した後に、 SSL_read()をしても異なるHTMLファイル を読み込む事ができません。 ちなみに、平文のhttpでは読み込む事が出来たのですが、 この辺りの情報が皆無に近くて苦労しています。 OpenSSLの場合は何か特別な事を行なわないと実装できないのでしょうか? 参考URLや書籍など、ご存知な方が居られましたら ご教授下さい。 |
>>3957 ニッタン > OpenSSLの場合は何か特別な事を行なわないと実装できないのでしょうか? 特にないと思っています。 https://www.rsasecurity.com/ と https://www.rsasecurity.com/solutionsPrimary.asp を keep-alive で読むサンプルを http://x68000.q-e-d.net/~68user/tmp/https-client-keep-alive.c に置きました。 このサンプルではレスポンスに </html> が含まれていればレスポンスの 受信が完了したものとみなして次のリクエストを送信する、という手抜き処理を していますが、本来は Content-Length の値などを見るべきです。 |
バンガードです。 以下の機能の実現方法が分からず困っています。 --------- rep_file ------------ $SERVER1 $SERVER2 $SERVER3 ------------------------------- 上記のファイルが存在する状態で、以下の定義を行います。 ------------------------------- SERVER1="server01" SERVER2="server02" SERVER3="server03" ------------------------------- この状態で、rep_fileを読み込み各行が表す変数の中身(server01,server02,server03) を表示させたい。 以下のスクリプトを組んで見ましたが、 -------------------------------- while read REP do echo \$$REP done < $REP_LIST -------------------------------- 結果は以下の通りでした。 -------------------------------- $SERVER1 $SERVER2 $SERVER3 -------------------------------- 環境はAIX5.2です。 出来れば、kshで実現したいと考えています。 |
>>3959 バンガード > echo \$$REP eval "echo $REP" としてみてください。 |