|
>>3624 68user >aix4* では aix-r4x3 はマッチしないように見えますが、 >またしても不適切な例ではありませんか? おっしゃるとおりです。 重ね重ね申し訳ございません。 >if ではできませんが、case ならできます。 なるほど、caseでなら「aix4*」が可能ですか。 助かりました。 |
|
初めまして、裏方と申します。 WinSockを用いたウィンドウズネットワークプログラムで、インター ネットを介して、私のマシン名からIPアドレスを取得する方法に ついて悩んでいます。言語はC言語を扱っております。 ローカルネットワークではマシン名からIPアドレスを取得するには Gethostbyname関数で取得できるのですが、インターネットを介した 遠方のマシンのから私のマシンのIPアドレスを取得する事が出来ま せん。(私のはサーバマシンでは無いので当然なのですが・・・) 私のマシンは大学で扱っているもので、ネットワークに繋ぐたびに 動的なIPアドレスが割り当てられるのですがサーバプログラム等を 私のマシン上で動かすときにいちいち相手に今のIPアドレスを教え なければならないので非常に不便です。 どうにかして、私のマシン名からIPアドレスを取得する方法が あるのでしょうか?どなたかアドバイスをお願いします。 |
|
>>3626 裏方 - 逆引きできないから困っているの? (もしそうなら「マシン名」というのは何?) - IP アドレスがころころ変わるから困っているの? (もしそうなら「マシン名」は関係ないのでは?) - そもそもマシン名って何を指しているの? FQDN? - DHCP で振られる IP アドレスには FQDN が設定してあるが、 外部向け DNS サーバには登録してなくて、内部からしか逆引き できない、という状況? などなど疑問はつきませんが、http://www.dyndns.org/ などの DynamicDNS と呼ばれるサービスを使うのが一つの解でしょう。 ただしこれは、大学とは全く関係ない FQDN を、大学から付与されて いる IP アドレスに結びつけるということです。管理者が寛容である ことを期待するか、リスクを負ってこっそりやるのがよいでしょう。 |
|
始めまして、UNIX使い始めです。 この度、awkコマンドを使用してファイルを分別して削除するシェルを作成しているのです。 そこでお聞きしたい事がるのです。 awkコマンドのifなどの中で変数は使えないのでしょうか? 現在、全ファイルに作成日付が付加されており、 指定日より前の物を削除したいいのです。 シェルの前半で指定日付を変数へ代入し、 lsとawkをパイプで繋いで削除しようとしています。 awk内のifなどによる条件判断で変数を宣言すると$0のメンバー名全体が表示されており、判別できないのです。 (ifを削除しprintで変数を表示させて確認) 出来ないのであれば何か別の方法を考えなくてはいけないのですが、 何方かお答えください。 |
|
>>3628 Tangerine 具体的にどのようなスクリプトなのか見せて頂けませんか? (そもそもawkを使う必要があるのでしょうか?) |
|
返信遅れてすいません。 えっと、確かに自分もawkを使う必要があるのか微妙ですが、 #! /usr/bin/sh make_date=`date +"%Y%m%d"` make_date=`echo $make_date"-1" | bc` echo $make_date ls *.*.* | awk -F. '{if($2<make_date) print $0}' 問題としているのはこのあたりです。 変数make_dateに昨日の日付けが入り、 それ以前のものを表示させたいのです。 正直なところを言えば、awkを使う必要性はまったくといってないです。 ただ、自分が色々調べた結果awkを使ってやれば出来るのか? と、考えて使ってみただけですので。 awkじゃなくて別の方法で行えるのであれば、 御教授いただけると嬉しいです。 |
|
>>3630 Tangerine 単純に昨日以前のファイルを表示するのであればこんな感じで。 (ファイルが無い時を考えるとls使った方がいいのかな?) ------ #!/bin/sh make_date=`date '+%Y%m%d'` for f in `echo *.[0-9]*.*` ; do d=`echo $f | cut -d. -f2` [ $d -lt $make_date ] && echo $f done ------ awkを使うのであればこんな感じかな。 実装されているawkによって変数の設定の仕方が違うので注意してください。 ------ #!/bin/sh make_date=`date '+%Y%m%d'` ls *.[0-9]*.* | awk -F. '{if($2 < d) print}' d=$make_date |
|
>>3631 zsh おおっ!!有難う御座います(T▽T) なるほど、forですね。なんとも勉強不足でした(^^; やはりawkでは変数をそのまま引き継げないのですね。 awk内で更に変数に入れ込まなければいけないとは(^^; 有難う御座います。 教えていただいた方法で作成していきます。 本当に助かりました(w |
|
>>3632 Tangerine > やはりawkでは変数をそのまま引き継げないのですね。 そういうわけではありません。 > ls *.*.* | awk -F. '{if($2<make_date) print $0}' awk はどういう引数が欲しいか、というと awk -F. '{if($2<$make_date) print $0}' や awk -F. '{if($2<make_date) print $0}' ではなくて、 awk -F. '{if($2<20040315) print $0}' となってほしいわけです。 で、こうなるように書くにはどうすればよいか。 [方法1] まず awk -F. '{...}' と '' で囲ってはいけません。'' で囲った時点で中に入っている 変数が展開されなくなります。というわけで、 awk -F. "{...}" と "" で囲みます。これで中の変数が展開されます。しかし awk -F. "{if($2<$make_date) print $0}" と書いてしまうと、$2 や $0 まで展開されてしまいます。$2 や $0 は awk にそのまま渡したいので、 awk -F. "{if(\$2<$make_date) print \$0}" と \ でエスケープします。 [方法2] 方法1 のエスケープがうっとうしいなら、まず awk -F. '{...}' と '' で全体を囲みます。そして狙いのところだけ '' の外に出します。例えば awk -F. '{if($2<'$make_date') print $0}' こんな感じ。つまり 'x'$y'z' という形にするわけですが、これは 'x' + $y + 'z' というふうに結合されるので うまく動きます。 いずれの場合であっても、 % sh -x hoge.sh と -x オプションを付け、変数が狙い通り展開されているかどうか チェックする癖をつけましょう。 |
|
なるほど〜、ややこしい事になっていたのですね〜 おかげさまで希望の日付以前のファイルを削除することが出来ました、 有難う御座います。 追伸 >% sh -x hoge.sh 使うようにしてみます(^^; |
|
>>3633 68user その方法があることをすっかり忘れてました。 (というか使った試しが無い・・・反省) いつもながら勉強になります。 |
|
初めまして、Perl初心者です。 Socketを使ってUDPのプロキシ機能を作りたいのですが、 Send関数のあて先の指定で、inet_atonを使わずに指定 する方法がわかりません。というのも、あて先IPアドレスは 分かっているのですが、/etc/resolv.confには記述されて いないからなのですが。 やっぱりinet_aton関数を使ってホスト名からIPアドレスを 取得しないとダメなのでしょうか? どなたか教えてください。 環境は、Solaris8 、perl5 です。 今はこんな感じなのですが、、、 socket(SOCKET, PF_INET, SOCK_DGRAM, 0); $ip = '192.168.253.155'; $sock_addr = pack_sockaddr_in(2426, $ip); send(SOCKET, "test", 0, $sock_addr); |
|
>>3636 tomato inet_aton には IP アドレスも渡せます。なので、 socket(SOCKET, PF_INET, SOCK_DGRAM, 0); $ip = '192.168.253.155'; $iaddr = inet_aton($ip); $sock_addr = pack_sockaddr_in(2426, $iaddr); send(SOCKET, "test", 0, $sock_addr); でよいです。 http://x68000.startshop.co.jp/~68user/net/func.html#inet_aton ではホスト名しか渡せないような書き方をしていますので、ちょっと 不適切でした。 そもそも、C 言語での inet_aton の機能は、 aaa.bbb.ccc.ddd という文字列を解析し、in_addr 構造体に格納する というもので、名前解決は行いません。一方、perl の Socket パッケージの inet_aton は、ホスト名も受け付けるように機能拡張されているわけです。 |
|
また初歩的なことで申し訳ありません。 以下のプログラムで、13行目以降で配列(CMD)の内容を表示させて いるのですが、全てNULLになってしまいます。 +1 #!/usr/bin/ksh +2 INDEX=0 +3 TEST=`ls -l | +4 while read LINE +5 do +6 CMD[$INDEX]=$LINE +7 echo $INDEX":"${CMD[$INDEX]} +8 let "INDEX = INDEX + 1" +9 done` +10 echo "$TEST" +11 +12 INDEX=0 +13 while [ $INDEX -lt 5 ] +14 do +15 echo $INDEX":"${CMD[$INDEX]} +16 let "INDEX = INDEX + 1" +17 done このプログラムの3行目から10行目を以下の様に修正すれば、13行目 以降でも配列の中身が正常に表示されます。 +3 ls -l | +4 while read LINE +5 do +6 CMD[$INDEX]=$LINE +7 echo $INDEX":"${CMD[$INDEX]} +8 let "INDEX = INDEX + 1" +9 done +10 最初のプログラムの様に、最初のループの結果を変数にセットする 場合で、ループから出た以降も配列の中身を保つ方法は無いでしょう か? |
|
>>3638 バンガード バッククォーテーションでくくると別プロセスになるから 変数を保持することはできないと思いますが・・・ |
|
>>3638 バンガード > このプログラムの3行目から10行目を以下の様に修正すれば この修正ではなぜダメなのか理由を書いていただかないと、代案が出せないです。 |
|
>>3640 68user 3行目から10行目の修正ですとwhile文の出力は標準出力へ出て行くだけです。 これを最初のプログラムの様にwhile文の出力を変数に格納したいと考えています。 |
|
>>3641 バンガード > while文の出力は標準出力へ出て行くだけ それは echo しているからでは? echo しなければ OK かと思います。 > while文の出力を変数に格納したいと考えています 修正版の方でも CMD[$INDEX]=$LINE と格納しているように見えます。 また、ループを抜けた後でも参照が可能だと思います。 |
|
>>3642 68user まず、3行目から10行目を修正した場合の結果は以下の通りです。 0:合計 7 1:-rw-r--r-- 1 furu man 4 Mar 22 15:59 test1 2:-rw-r--r-- 1 furu man 8 Mar 22 16:00 test2 3:-rw-r--r-- 1 furu man 8 Mar 22 16:00 test3 4:-rw-r--r-- 1 furu man 12 Mar 22 16:01 test4 5:-rw-r--r-- 1 furu man 12 Mar 22 16:01 test5 6:-rw-r--r-- 1 furu man 4 Mar 22 16:01 test6 7:-rw-r--r-- 1 furu man 20 Mar 22 16:02 test7 0:合計 7 1:-rw-r--r-- 1 furu man 4 Mar 22 15:59 test1 2:-rw-r--r-- 1 furu man 8 Mar 22 16:00 test2 3:-rw-r--r-- 1 furu man 8 Mar 22 16:00 test3 4:-rw-r--r-- 1 furu man 12 Mar 22 16:01 test4 次に3行目から10行目を修正しない場合の出力結果です。 0: 1: 2: 3: 4: ちなみに7行目のecho文をコメントにしても結果は同じです。 この様にwhile文をダブルクォーテーションで囲むかどうかでwhile 文を抜けた後で配列を参照できるかが異なってきます。 No.3639でzshさんが回答されている様にダブルクォーテーションで囲んでいるために別プロセスになってしまうのが原因の様です。 whileの出力を変数に格納した上で、whileから抜けた後も配列の内容が参照出来る様にするにはどうしたら良いのでしょうか? |
|
>>3643 バンガード > ちなみに7行目のecho文をコメントにしても結果は同じです。 わたしはありえないと思いますが、そういう ksh もあるんですかね。 当方の HP-UX11i で #!/usr/bin/ksh INDEX=0 ls -l | while read LINE; do CMD[$INDEX]=$LINE let "INDEX = INDEX + 1" done INDEX=0 while [ $INDEX -lt 5 ]; do echo $INDEX":"${CMD[$INDEX]} let "INDEX = INDEX + 1" done というのスクリプトを実行したところ、 0:合計 7 1:-rw-r--r-- 1 furu man 4 Mar 22 15:59 test1 2:-rw-r--r-- 1 furu man 8 Mar 22 16:00 test2 3:-rw-r--r-- 1 furu man 8 Mar 22 16:00 test3 4:-rw-r--r-- 1 furu man 12 Mar 22 16:01 test4 というような、先頭 5 行分だけの出力が得られました。 |
|
>>3644 68user 御提示いただいたシェルなら当方(AIX 5.1)でも同様の結果が出 ます。 以下の様に修正した場合に配列の中身が2つ目のwhile文で出力され なくなります。 #!/usr/bin/ksh INDEX=0 TEST=`ls -l | while read LINE; do CMD[$INDEX]=$LINE let "INDEX = INDEX + 1" done` INDEX=0 while [ $INDEX -lt 5 ]; do echo $INDEX":"${CMD[$INDEX]} let "INDEX = INDEX + 1" done |
|
>>3645 バンガード > 御提示いただいたシェルなら当方(AIX 5.1)でも同様の結果が出ます。 そうでしょうね。 > 以下の様に修正した場合に配列の中身が2つ目のwhile文で出力されなくなります。 そうなりますね。`〜` とするとサブシェルが起動されますから、 $CMD が設定されるのはサブシェルだけで、親のシェルには反映 されません。 質問を続ける目的が全く見えません。>>3644 のスクリプトは >>3641 の希望を満たしているように見えますが違うのですか? まだ説明して いない理由があって、>>3644 は採用できないのですか? |
|
>>3646 68user >質問を続ける目的が全く見えません。>>3644 のスクリプトは >>3641 の希望を満たしているように見えますが違うのですか? まだ説明して >いない理由があって、>>3644 は採用できないのですか? 3644のスクリプトでは、最初のwhile文の出力を変数に格納していません。 この形式であれば、最初の私の質問で御提示させていただいている通りで す。(3行目から10行目を修正したもの) 次に質問を続ける理由ですが、3642で「echo しているからでは? echo しなければ OK かと思います。」 「ループを抜けた後でも参照が可能だと思います。」と回答されているの で、そんなことは無いと言うことで3643の回答をしています。 それに対して、3644で「わたしはありえないと思いますが」とお答え いただいていますよね? ですから、それに対しての回答で3645の回答をさせていただいていま す。 3642の回答が無ければ、3639の回答で「なるほど」と納得していた のですが、3640で「なぜだめなのか?」と言う事ですので状況を説 明させていただいている次第です。 結局3640の回答にある通り、バッククォーテーションで囲んでいる ために別のジョブとして起動されるためにwhileから抜けた後で配 列を参照できないのですよね。 私としては最初のwhile文での出力を変数に格納した上でwhile文の 外でも配列の中身を参照したいと言うのが最終目標です。 しかしながら、バッククォーテーションで囲んだ以上は別タスクに なるために、while文の外で配列が参照できないとなれば、最初の while文の出力をファイルに格納するしかないかと考えています。 もし、それ以外の方法があるのであれば、お教えいただけると助か ります。 |
|
>>3647 バンガード やっとわかりました。変数に格納って TEST=`…` のことですか。 わたしの読解力が足らないだけでしょうが、 「変数 TEST に ls の出力全体を、CMD には 1行ずつの 結果を代入したい」 「このスクリプトの目的は ls の結果全体を表示しつつ、 なおかつ先頭 5 行を表示すること」 などと書いていただければもっと早く理解できたと思われます。 で、スクリプトは以下のような感じでしょうか。 #!/usr/bin/ksh INDEX=0 ls -l | while read LINE; do CMD[$INDEX]="$LINE" TEST="$TEST ${INDEX}:$LINE" let "INDEX = INDEX + 1" done echo "$TEST" INDEX=0 while [ $INDEX -lt 5 ]; do echo "${INDEX}:"${CMD[$INDEX]} let "INDEX = INDEX + 1" done |
|
>>3649 バンガード なるほど、全ては私の質問の書き方が原因だったのですね。 本当に申し訳ありません。 今回御指摘いただいた様な表現を最初からすべきでしたね。 御提示いただいたスクリプトで目的が達成できました。 重ね重ね誠にありがとうございました。 |
|
awk(正規表現?)でちょっと行き詰まってしまったので質問します。 OS:Solaris8 やりたいこと 環境変数の内容で awk を使ってテキストファイルの検索を行う。 検索に使用する環境変数を HOGE として awk '/ENVIRON["HOGE"]/ {print}' FILE_NAME を行っても検索されませんでした。 ちなみに {print ENVIRON["HOGE"]} とした場合には値が返りませんでした。 何か根本的なところで間違ってるかもしれませんが・・よろしくお願いします。 #grep $HOGE FILE_NAME とすれば出来るのですが・・awk で実現したいのです。 |
|
>>3650 m16 awk はよくわかりませんが、 % awk '$0 ~ ENVIRON["HOGE"] {print}' FILE_NAME ですかね。 |
|
>>3650 m16 /usr/bin配下のawkでは環境変数を参照できなかったと思います。 /usr/xpg4/bin/awkかnawkを使ってください。 % nawk '$0 ~ ENVIRON["HOGE"] {print}' FILE_NAME |
|
68user さん zsh さん レスありがとうございます。 まだうまくいきません。 確認のため /usr/bin/awk 、/usr/xpg4/bin/awk 、 /usr/bin/nawk で { print ENVIRON["HOGE"] } としても空白しか出てきません。 もうちょっと修行してみます |
|
>>3653 m16 HOGEはちゃんとexportしてますよね? |
|
UNIXのtarコマンドについて教えて下さい。 DATテープから任意のファイルをワイルドカード(*)で取り出したいの ですが上手くいきません。 どのようにすれば取り出せますか。 rwxr-xr-x 0/3 0 2004年 2月 17日 20:55 ./bkup/ rw-r--r-- 0/3 3506495 2003年 6月 5日 15:48 ./bkup/200303031741data_tar.gz rw-r--r-- 0/3 3511527 2003年 3月 17日 09:20 ./bkup/200303032300data_tar.gz rw-r--r-- 0/3 3517092 2003年 3月 17日 09:20 ./bkup/200303042300data_tar.gz : : rw-r--r-- 0/3 3511527 2003年 3月 17日 09:20 ./bkup/200312302300data_tar.gz rw-r--r-- 0/3 3517092 2003年 3月 17日 09:20 ./bkup/200312312300data_tar.gz このリストから200309となっているもファイルをとりだそうといろいろと やってみたのですが、 # tar -xvf /dev/rmt/1m 200309\*data.tar.gz # tar -xvf /dev/rmt/1m ./bkup/200309\*data.tar.gz # tar -xvf /dev/rmt/1m './bkup/200309*data.tar.gz' # tar -xvf /dev/rmt/1m "./bkup/200309*data.tar.gz" 上手くいきませんでした。 HP-UX11.00です。 |
|
>>3655 すすむ すみません リストのファイル名は、 YYYYMMDDHHMMSSdata_tar.gz ↓ YYYYMMDDHHMMSSdata.tar.gz です。 |
|
>>3656 すすむ tar -xvf /dev/rmt/1m ./bkup/200309*data.tar.gz ではどうでしょうか? |
|
>>3657 バンガード >tar -xvf /dev/rmt/1m ./bkup/200309*data.tar.gz 上手くいきません。 |
|
>>3652 zsh > /usr/bin配下のawkでは環境変数を参照できなかったと思います。 ご指摘ありがとうございます。まわりに Solaris 環境がなくなってしまった ため誤ったことを書くことが増えると思いますが、そのときはご指導願います。 >>3653 m16 % echo abc | /usr/bin/nawk '{ print ENVIRON["HOGE"] }' や % printenv HOGE で何も出力されないなら、環境変数の設定ミスでしょう。 >>3655 すすむ > UNIXのtarコマンドについて教えて下さい。 > DATテープから任意のファイルをワイルドカード(*)で取り出したいの > ですが上手くいきません。 HP-UX 11i で試した限りでは、HP の tar ではワイルドカードは使用 できないようです。 - 全部 tar xf で展開し、狙いのファイルを拾う - tar tf の結果を grep で拾って tar xf で完全なファイル名を指定する - GNU tar をインストールする などの方法を検討するのがよいかと思われます。 >>3657 バンガード > tar -xvf /dev/rmt/1m ./bkup/200309*data.tar.gz sh 系・csh 系いずれも、カレントディレクトリに bkup というディレクトリが 存在し、その下に 200309*data.tar.gz にマッチするファイルが存在した場合、 存在するファイル名に展開されてしまい、結果として意図とは異なるファイルが 展開されます。 また、sh 系ではマッチしなかった場合 ./bkup/200309*data.tar.gz がそのまま tar に渡りますが、csh 系ではシェルの glob 展開の時点でエラーになります。 メタキャラクタは必ずエスケープしましょう。 |
|
>>3658 すすむ 当方はAIX 5.2上で試しましたが、以下の様な結果になります。 (tar でなくて申し訳ありません) % ls -l ./test_dir 合計 7 -rw-r--r-- 1 furu man 0 Mar 25 13:01 20030901data -rw-r--r-- 1 furu man 0 Mar 25 13:01 20030902data -rw-r--r-- 1 furu man 0 Mar 25 13:01 20030903data -rw-r--r-- 1 furu man 0 Mar 25 13:02 20031201data -rw-r--r-- 1 furu man 0 Mar 25 13:02 20031202data -rw-r--r-- 1 furu man 0 Mar 25 13:02 20031203data -rw-r--r-- 1 furu man 0 Mar 25 13:02 20040101data -rw-r--r-- 1 furu man 0 Mar 25 13:02 20040102data -rw-r--r-- 1 furu man 0 Mar 25 13:02 20040103data -rw-r--r-- 1 furu man 4 Mar 22 15:59 test1 -rw-r--r-- 1 furu man 8 Mar 22 16:00 test2 -rw-r--r-- 1 furu man 8 Mar 22 16:00 test3 -rw-r--r-- 1 furu man 12 Mar 22 16:01 test4 -rw-r--r-- 1 furu man 12 Mar 22 16:01 test5 -rw-r--r-- 1 furu man 4 Mar 22 16:01 test6 -rw-r--r-- 1 furu man 20 Mar 22 16:02 test7 % wc ./test_dir/200309*data 0 0 0 ./test_dir/20030901data 0 0 0 ./test_dir/20030902data 0 0 0 ./test_dir/20030903data 0 0 0 合計 念のため、csh と ksh で試しましたが、結果は同じです。 |
|
>>3660 バンガード 根本的に誤解があるようです。 > % wc ./test_dir/200309*data この場合、操作対象ファイルは既に存在するのでエスケープは不要です。 この例ではシェルがメタキャラクタを展開し、wc は ./test_dir/20030901data ./test_dir/20030902data ./test_dir/20030903data というような引数を得ます。 しかし > # tar -xvf /dev/rmt/1m 200309\*data.tar.gz の場合は、今から展開しようとしているわけなので、ファイルはまだ 存在しません (仮に存在していたとしても、存在するファイルにマッチ してもらっては困るわけです)。 よって、シェルが展開しないように \* などとエスケープします。 すると tar は -xvf /dev/rmt/1m 200309*data.tar.gz というふうにメタキャラクタをそのまま受け取るので、それを /dev/rmt/1m 内のデータと比較し、マッチするファイルのみを抽出します。ただし 今回のように tar が自前でメタキャラクタを展開する機能を持っていない とうまくいきません。 用語集: ファイルグロブ http://x68000.startshop.co.jp/~68user/unix/pickup?%A5%D5%A5%A1%A5%A4%A5%EB%A5%B0%A5%ED%A5%D6 の一読をお勧めします。 |
|
>>3661 68user まず最初にお断りさせていただきたいのですが、私が3660の投稿を行ったタイミングでは まだ3659の発言はありませんでした。 ですので、3660投稿の時点では3659の発言は読んでいませんでした。 ただ、どちらにしても私のテスト自体に思い違いがあった様で御指摘は大変参考になり ました。 御指摘誠にありがとうございました。 この投稿を送信次第御提示いただいた資料を参照してみます。 |
|
>>3659 68user >HP-UX 11i で試した限りでは、HP の tar ではワイルドカードは使用 >できないようです。 > - 全部 tar xf で展開し、狙いのファイルを拾う > - tar tf の結果を grep で拾って tar xf で完全なファイル名を指定する > - GNU tar をインストールする >などの方法を検討するのがよいかと思われます。 tar tvf の結果をgrepで拾って、tar xvf に対して完全なファイル名を 指定する方法でできました。 ありがとうございました。 |
|
はじめまして。Naokiと申します。 皆さんに教えていただきたいことがあり、書き込ませていただきます。 レンタルサーバーを借りてホームページを開設しようとしているのですが、 最初に読み込まれるトップページを指定したいのですが、どのようにしたらよいのでしょうか? 具体的には、アクセス元がパソコンor携帯かによって、それぞれのトップページを振り分けるCGI をトップページにしたいと考えています。(ファイル名はindex.cgi) サーバー会社に問い合わせたところ、『index.cgiやindex.phpをトップページにする方法として、 .fowardファイルにて操作可能』と言われ、それ以上はサポート外なので対応できないということです。 そこで、どのように設定したらよいのか教えてください。 以上、よろしくお願いいたします。 |
|
こんばんは。 皆様のようにきっちり回答できる自信がなく、時折の書き込みで恐縮ですが、 たまたま一部知っている内容だったので回答させていただきます。 >>3664 Naoki CGI側でサーバ変数HTTP_USER_AGENTを参考に判定する方法があります。 CGIでよく使われていると思われるサーバ変数を解説しているページが あったのでご紹介します。 http://www.din.or.jp/~hagi3/Perl/http.htm Japan Apache Users Groupでの解説個所も見つけました。 http://www.apache.jp/docs/howto/cgi.html#environmentvariables |
|
こんにちわ。 Perlについてのごく初歩的な質問なんですがファイルデータを保存する時の方法についてなんですが CSV形式なら open(OUT,">data.dat"); print OUT "$FORM{'fld1'},$FORM{'fld2'},$FORM{'fld3'},$FORM{'fld4'}\n"; close(OUT); だと思うのですが固定長の場合はどうしたらよいのでしょうか? よろしくお願いします。 |
|
>>3666 samy >固定長の場合はどうしたらよいのでしょうか? 基本は printf(OUT "%05d%20s%010d%10s\n", $FORM{'fld1'}, $FORM{'fld2'}, $FORM{'fld3'}, $FORM{'fld4'}); など。%d は数値。%s は文字列。%20d は右詰め。%-20d は左詰め。 %020d はゼロパディング。 項目数が 10〜20 程度ならこの方法でよいでしょう。 もし項目数が 100 を超えるのであれば、出力フォーマットの定義 ファイル化などを検討しましょう。 |
|
ありがとうございます。 助かりました。 また、質問があれば投稿しますのでその時はよろしくお願いします。 |
|
だから私を見て! http://sgldwssr.hp.infoseek.co.jp/otp.html |
|
awkについての質問です。 Solaris7上で、nawkを実行する際、 "cat text.txt" | getline var という構文があるとvarに "cat text.txt" の結果が入るのですが、 同じことを /usr/xpg4/bin/awk で実行すると var に値が 入らないようです。 このあたりの事情をご存知の方、教えてくれませんか? |
|
下記の件ですが、awkをかける対象のテキストの行数が、 getlineで取り込まれるテキストの行数より少ない場合に 発生することがわかりました。 つまり、getlineで取り込まれるテキストの方が短い場合、 nawkでは最後の行の内容が保持されて、それを利用した置換処理が 行われるが、 /usr/xpg4/bin/awk では行われないということです。 |
|
>>3671 tmr なるほど。そういう違いがあることは知りませんでした。一般論としては、 getline の戻り値チェックをしっかり行ないましょう、てな感じでしょうか。 |
|
誰かハイホーネットにメールを送信するアプリをくれましたか?(w |
|
はじめましてvmと申します。 UNIXのコマンド処理で質問があるのですが、 何行かあるテキストファイルの指定のカラム位置に文字列を行単位に挿入 するという処理を、UNIXのコマンドだけでやりたいと思っています。 自分で処理を考えてみたのですが、 1. cutコマンドを使用して、指定カラム位置を境にして、 「指定カラム位置より前の文字列が入ったファイル」と 「指定カラム位置より後の文字列が入ったファイル」に分割する。 2. paste コマンドを使用して、セパレータを元のファイルが使用していない文字を指定して、 1で作ったファイルを結合する。 3. sedコマンドでセパレータ文字を挿入したい文字列に置き換える。 ワークファイルができてしまって、UNIXっぽくないので、 これ以外にもっと簡単なやり方がないか探しているのですが、 もしご存知の方いらっしゃいましたら、ご教授いただけないでしょうか。 よろしくお願いします。 |
|
>>3674 vm やりたいことがよくわからないので、入力と出力のサンプルを 提示してください。 |
|
>>3675 68user 多分このような事を考えているのだと思います。 ■入力ファイル aaaa,bbbb cc,ddd eeeeee,ffff ■挿入文字列 00 ■出力ファイル aaaa00bbbb cc00ddd eeeeee00ffff >>3674 vm で、やりたい事が上記の通りだとすると、 perlとかawkで出来ると思います。 |
|
こんにちはvmです。 説明不足でした。 入力データは1ファイルで、 AAAABBBCCCCC DDDDEEEFFFFF GGGGHHHIIIII : という感じで項目間の区切り無しのレコードが いくつか入っているという状態で、 AAAABBB****CCCCC DDDDEEE****FFFFF GGGGHHH****IIIII : 1行目で見ると、BBBとCCCCCの間に****を挿入するということを、 シェルかUNIX標準コマンドでやりたいと考えています。 先に書いた私の手順ですと、一度cutコマンドで AAAABBB DDDDEEE GGGGHHH : CCCCC FFFFF IIIII : 2つのワークファイルを作るので手順も多くて面倒なため、 他にやり方がないものかと考えている次第です。 もっと単純化できる方法がありましたら、ご教授ください。 お願いいたします。 |
|
>>3677 vm 区切り文字なしだとすると、文字列の挿入個所は何を基準に判断するのでしょうか? 下の例を見る限りでは、行頭からのバイト数で分割してるように見えますが、あってますか? 後気になった点はUNIXの標準コマンドというのは どこまでを指すのでしょう? インストール時点でインストールされるコマンドは、 OS・インストールオプションによって異なると思いますが・・・ |
|
こんにちはvmです。 >下の例を見る限りでは、行頭からのバイト数で分割してるように見えますが、あってますか? すみません。そのとおりです。 >後気になった点はUNIXの標準コマンドというのは >どこまでを指すのでしょう? POSIXに準拠しているコマンドのことを指していました。 あれからちょっと調べてみたのですが、 awk '{printf("%s%s%s\n", substr($0,1,2), "TUIKA", substr($0,3));}' target.txt > result.txt awkコマンドであれば、私のやりたいことがワークファイルを作らずに 実現できそうなことがわかりました。 どうもお騒がせしました。 これより良い方法がございましたら、ご教授ください。 |
|
gfg |
|
宜しくお願いします。 tarコマンドを実行した際に以下のメッセーシ゛が出たんですが、 何を意味しているかわかりません。 ご教授ください。 -------------------------------------------------- cd / tar -cvf /dev/rmt0n ./usr/* tar -rvf /dev/rmt0n ./var/* ← メッセーシ゛が出ます -------------------------------------------------- 表示メッセージ tar:blocksize=0 tar:backspace over record failed -------------------------------------------------- ご教授ください。宜しくお願いします。 |
|
mailxコマンドに関してですが 件名がベース64で本文がJISコードのメールを読む時、 以下の状態になってしまいます。 直す方法を知っている方おりましたらお教えください 1.件名が日本語の長文だと、以降の画面が文字化けします 2.JISコードの本文を開くと 「---Executing: kterm sh: kterm: 見つかりません」 とでてしまい表示できません |
|
>>3679 vm > これより良い方法がございましたら、ご教授ください。 awk より良い方法かどうかはわかりませんが、 sed 's/^\(..\)/\1TUIKA/' < target.txt > result.txt というのもあります。 >>3681 馬場 すでにアーカイブ済のファイルが出現したため、前に戻って 置き換えようとしたが、テープドライブのため前に戻る機能が なかった、ということではないですかね。 >>3682 ryo Solaris2.6 ではその症状は出ませんでした。 |
|
こんにちは。Phantomと申します。 ネットで色々調べた結果ちょっと、見当たらなかったので質問させてください。 アクセスログの話なのですが、Web/FTPサーバのアクセスログでは有りません (Web/FTPのアクセスログの情報は腐るほど有りました。また、情報が全く無か ったと言うのは嘘で、高いソフトウェアやASPぐらいの情報しか出てこず、個人 の私としては手が出ません。)。 ローカルのLinux環境内でアクセスされたファイルのログを取りたいと考えて いるからです(Unix系OSで実現するのが難しいから情報が少ないのでしょうか?)。 当然、アクセスログなのでアクセスしたユーザ名、時間、アクセス先などの情報を 見たいと思っています。 セキュリティの事もあるのですが、私自身が何時ファイル(特に設定ファイル)の 編集を行ったかという履歴を見たいからです。 それで、これに見合った(フリー)ソフトウェアやシェルスクリプト等が存在しまし たら、紹介していただければ幸いです。(それとも、もしかしてすごく簡単にPerl とかで組めちゃったりするんでしょうか?) |
|
>>3684 Phantom 履歴や変更点の確認をしたいということなら、cvs や subversion などのバージョン管理ツールを使うのがよいでしょう。 履歴を何段階でもとることができ、細かい修正点を記録できるという 利点がありますが、その一方でファイル更新とバージョン管理とが 密に連携しているわけでないので、バージョン管理ツールへの登録 忘れが発生する可能性がある、という欠点があります。 あるいは > ユーザ名、時間、アクセス先 だけの情報だけでよいなら、 - ユーザ名、時間、ファイル名を記録する - エディタを起動する - (必要なら) 編集前と編集後のファイルをどこかに保存する というファイル編集用スクリプトを作成し、それを使うように すればよいでしょう。もちろん、このスクリプトを使わずに直接 ファイルを修正してしまうとアウトです。 もっと厳密にやりたいならシステムコールをフックするタイプ のものが必要です。たとえば Linux Security Module (LSM) や Sysrace: http://www.citi.umich.edu/u/provos/systrace/linux.html など。 しかしこれらの主目的はシステムコールを許可するかしないかを 決めるためのものなので、ログを記録できるような仕組みがある のかどうかはわかりません。 > Unix系OSで実現するのが難しいから情報が少ないのでしょうか? Windows なんかだと API のフックが簡単にできますが、UNIX は そこらへんの機能が弱いのです。 |
|
>>3685 68user 凄く素早いレス有難う御座いました。 沢山の情報を与えてくださって感謝しております。 > cvs や subversion 成る程。バージョン管理ツールという手が有りましたか。 > ファイル編集用スクリプトを作成 作ってみたいと思います。ただ、仰る通り私、忘れっぽいので直接ファイル 編集しちゃって失敗しそうです。 > LSM や Sysrace 私には難しいみたいですが、一つの手として調べてみます。 |
|
>>3686 Phantom >作ってみたいと思います。ただ、仰る通り私、忘れっぽいので直接ファイル >編集しちゃって失敗しそうです。 エディタコマンドと同じ名前のスクリプトを作成し、 スクリプトを格納したディレクトリを環境変数PATHの先頭に追加しては如何なでしょうか? |
|
Solaris7にて/dev/consoleに出力しているログを横取りして ファイルに落としたいんですが、なにかいい方法はありますか? ありましたらご教授願います。 |
|
こんにちは。 あるSolarisからLinuxにPingすると、 do you want to ping broadcast? Then -b というメッセージがかえってくるのですが、 どういう意味ですか?他にも10台あって、この2台以外はお互いちゃんとPingできるのですが、どうしてでしょうか? SolarisのIPとホストは172.17.155.01 AT002といいます。 Linuxのほうは172.17.155.17 AI007といいます。 SolarisからLinuxにPingすると"no answer from AI" といわれ。 LinuxからSolarisにPingすると"do you want to ping broadcast? Then -b" なります。 教えてください。 MM |
|
>>3688 scott syslog に出力するようにして、syslog.conf の方で ログファイルにも落とすようにする、という方法しか 思いつきませんでした。 >>3689 MM > do you want to ping broadcast? Then -b > どういう意味ですか? x.y.z.255 などのブロードキャスト宛に ping したいので あれば、-b オプションを付けなさい、ということです。 とりあえずネットワーク設定がうまくいっていないようなので、 そこを見直すのがよいのではないでしょうか。たとえば /etc/hosts に変な記述がないかとか、ネットマスクは同じか とか、IP アドレスを直接指定して ping するとどうなるかとか。 で、質問です>どなたか 質問 1. 「Do you want to ping broadcast」でぐぐると、 http://licensing.steeleye.com/open_source/diffs/ping.c が見つかりました。 #ifdef linux if (source.sin_addr.s_addr == 0) { int probe_fd = socket(AF_INET, SOCK_DGRAM, 0); dst.sin_port = htons(1025); if (connect(probe_fd, (struct sockaddr*)&dst, sizeof(dst)) == -1) { if (errno == EACCES) { if (broadcast_pings == 0) { fprintf(stderr, "Do you want to ping broadcast? Then -b\n"); exit(1); } } } } bind(s, (struct sockaddr*)&source, sizeof(source)); #endif とありますが、何をやってるのかさっぱりわかりません。 source.sin_addr.s_addr が 0 なら、UDP でポート 1025 に connect? なんのために? connect したら、それを bind? なんのため? 質問 2. あるディストリビューションの Linux で採用している ping の ソースを見たいんですが、どこを探せばいいでしょうか? たとえば RedHat ならどこを見ればよいですか? |
|
>>3690 68user >質問 2. >あるディストリビューションの Linux で採用している ping の >ソースを見たいんですが、どこを探せばいいでしょうか? たとえば >RedHat ならどこを見ればよいですか? いつもどおり答えになってませんがDebian GNU/Linuxのは見つかりました。 http://packages.debian.org/stable/net/netkit-ping linuxは基本的にtar.gzやtar.bzでの配布よりもrpm(redhat package manaer) 形式(ソースなら*.srpm、*.src.rpmの場合もあり)が普通みたいですよ。 なお今回は、[ping srpm ソース]で検索→[netkit-ping]で検索→到達です。 # 本当はもっといろいろ遠回りしてますが… |
|
僕は某高専2年の電気科なんですが,C言語の授業があって学校のPCのOSがunixなんですよね〜。 Windowsで作成した文書ファイル(拡張子.c)をFDでunixに送る場合,文字化けしますよね? それを防止する方法を教えて下さい。メールで返答していただければ幸いです。 |
|
>>3692 流離のカメソらいだ〜 一般的にはWindowsの標準文字コードがS-JISで、UnixがEUCだからそうなります。 FDに保存する際にエディタでEUCに変換しておくか、 エディタにその機能がないかUnix上で変換かける場合は、nkfコマンドを使ってください。 |
|
texの文書で、dviのファイルをpdh形式に変換したいのですが、人に聞いた ところGhostscriptを使ってできるとのことで、早速GSを落としてみたので すが、具体的な操作など教えてもらえれば幸です。 |
|
68userさん、ありがとうございます。 >x.y.z.255 などのブロードキャスト宛に ping したいので >あれば、-b オプションを付けなさい、ということです。 x.y.z.0もブロードキャスト宛ということになるのでしょうか? |
|
>>3691 has なるほど、ありがとうございます。Debian の ping は、 Do you want to ping broadcast? Then -b というエラーは出さないようですね。 >>3695 MM > x.y.z.0もブロードキャスト宛ということになるのでしょうか? x.y.z.0/255.255.255.0 はネットワークアドレスです。 ただ、BSD 系・BSD 系を元にした実装 (Solaris・Linux など) は ネットワークアドレスに対する ping に対して返事を返します。 Windows 系はたしか返事を返さないはず (ネットワークアドレスに 対する ping だけでなく、ブロードキャストへの ping も返さない)。 だから、ネットワークアドレス宛の ping であっても、ブロード キャスト宛の ping と同等に機能する環境もあります。 ただし ping は 「この宛先はブロードキャストアドレスだから `Do you want to ping broadcast? Then -b' というメッセージを出そう」 などと判断しているわけではなく、 >>3690 68user に書いたとおり、connect して errno が EACCES ならこのメッセージを 出力して終了しているだけです。しかしこの connect の意味がさっぱり わからないので、「ネットワーク設定がおかしいのでは?」以上のアドバイス はできません。 てゆーか、どなたか >>3690 の意味を教えてください。 >>3694 abc > texの文書で、dviのファイルをpdh形式に変換したいのですが pdh は pdf の typo ですか? gs 付属の ps2pdf はいまいちで、今どきは dvipdfm を使うと 聞いたことがありますが、最新情報や細かなノウハウは知りません。 よって、「dvi pdf 変換」などで検索してみるか、2ch の UNIX 板 などで質問してみてはいかがでしょうか。 |
|
はじめまして、こんばんは。 LINUX, Apache, PHP, MySQL、HTMLでのシステムを考えているのですが、 ちょっと行き詰まってしまって、、、よろしくお願いいたします。 ページがジャンプした瞬間に、あるフィールドをいきなり入力待ち状態にしたいのです。 通常はページに移動後マウスなどで入力したいフィールドを一度クリックする必要があります。 現在フィールドはフォーム<input>タグで作成しています。 カスタマーは(バーコードを使って>マウス1クリック無しで) いきなり入力したい!というのがご要望です。 関連のページのご紹介でも何でもかまいませんので、 是非、よろしくお願いいたしますm(_ _)m |
|
>>3697 うほほ たとえば http://www.google.co.jp/ がその技を使っています。 ソースを見ていただければわかりますが、 <body onload="document.hoge.fuga.focus()"> <form name=hoge> <input type=text name=fuga> </form> </body> とします。 |
|
>>3696 68user >なるほど、ありがとうございます。Debian の ping は、 > Do you want to ping broadcast? Then -b >というエラーは出さないようですね。 そーゆーことですか、了解です。ならredhat9では次の通りになりました。 % strings /bin/ping | grep Then Do you want to ping broadcast? Then -b % |
|
ファイルをダウンロードするスクリプトを作成していますが、 ファイルサイズが大きいとファイル内容は一部しかダウンロードできません。 sysreadの戻り値$Ret_Lenは、正しい値が返ってきます。 最後のprint文で、全てを出力していません。あるいは、$INBUFに全てが 格納されてないかです。 全ての内容をダウンロードするには、どうすべきなのでしょうか? $size = -s $dl_file; open(INF, $dl_file) or &CgiError( "Error: Unable to open file $dl_file: $!\n" ); binmode(INF); $Ret_Len = sysread(INF, $INBUF, $size); if (defined $Ret_Len) { #エラーではない if ($Ret_Len >0) { #読み取りの成功 ; } else { #EOF close(INF); } } elsif ($! == EAGAIN) { #ブロックエラー $Ret_Len = sysread(INF, $INBUF, $size); } else { die "sysread() error: $!"; } $NowMime = substr( $f_name, rindex($f_name, ".")+1, length($f_name) ); $NowMime =~ tr/a-z/A-Z/; $RetMime = ""; # 2001.12.19 added by ishikawa -> #$mimeMach = 'dummy'; # 2001.12.19 added end ishikawa <- if( $NowMime ne "" ){ if( open(CB, "./lib/mime.types") ){ @mimein = <CB>; close( CB ); foreach( @mimein ){ if(/^[^#\n\r]/){ s/[\t]+/\t/; ($MimeHead,$MimeBody) = split(/\t/); # 2001.12.19 added by ishikawa -> if( defined $MimeBody ){ # 2001.12.19 added end ishikawa <- foreach $mimeMach ( split( /\s/, $MimeBody ) ){ $mimeMach =~ s/\s//g; $mimeMach =~ tr/a-z/A-Z/; if( $mimeMach eq $NowMime ){ $RetMime = $MimeHead; last; } } # 2001.12.19 added by ishikawa -> } # 2001.12.19 added end ishikawa <- if( $RetMime ne "" ){ last; } } } } } if( $RetMime eq "" ){ print "Content-Type: application/octet-stream\n"; print "Content-Disposition: inline; filename=\"$f_name\"\n\n"; } else{ print "Content-Type: $RetMime\n"; print "Content-Disposition: inline; filename=\"$f_name\"\n\n"; } binmode(STDOUT); print $INBUF; |
|
>>3700 sagara - 「ファイルサイズが大きい」とは具体的に何バイトですか? - あるバイト数以上のファイルの場合、常にダウンロードできないのですか? - 大きいファイルを処理するのに何秒かかりますか? - length($INBUF) の値は? - $INBUF の内容をファイルに出力すると、正常に出力できますか? - 「sysreadの戻り値は正しい」というのは「正常にダウンロード できなかった場合でも、sysread の戻り値は正しい」ということ ですか? - sysread ではなく read を使うとどうなりますか? - OS 名・OS のバージョン・perl のバージョンは何ですか? あと、コメント部分や関係ない箇所は極力削ってから投稿しましょう。 仕事のソースであれば特に。 |
|
>68USER様 早々のお返事をありがとうございました。 やってみたら、ばっちりでした〜! 本当にありがとうございました♪ |
|
はじめまして。よろしくお願いします。 環境:NetBSD1.5.2、Apache2.0.49 以下に示す接続が、4日くらいたっても消えません。 これは、クライアントがhttpで何かをダウンロード中の状態の1つということでしょうか? ずっとこの状態のままなのはどういう原因が考えられますでしょうか? Apacheのログには、このクライアントからのアクセスログは存在しませんでした。 FIN_WAIT_2の状態が終了した後で書き込まれるのでしょうか? %netstat -an (一部抜粋) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 15964 210.*.*.*.80 133.*.*.*.15241 FIN_WAIT_1 tcp 0 16460 210.*.*.*.80 133.*.*.*.6322 FIN_WAIT_1 tcp 0 16500 210.*.*.*.80 133.*.*.*.19339 FIN_WAIT_1 |
|
>>3703 lock サーバ側から close すると (正確にはアクティブクローズ すると) FIN_WAIT_1 になります。普通はこの後にクライアント から ACK・FIN が帰ってきて FIN_WAIT_2 に遷移しますが、 この辺がうまくいっていないものだと思われます。 > ずっとこの状態のままなのはどういう原因が考えられますでしょうか? わかりません。普通は FIN_WAIT_1 のままにならないように タイマか何かがあると思いますが、FIN_WAIT_1 タイマって 存在するのかな? (FIN_WAIT_2 タイマはあるけど) > FIN_WAIT_2の状態が終了した後で書き込まれるのでしょうか? これまたわかりません。apache のソースを読みましたが、どこで ログを吐いてるのかすらわかりませんでした。 とまぁ何の役にも立たない回答になってしまいましたが、 数日様子を見てはいかがでしょうかね。 |
|
数日前、FreeBSD 5.2Rをインストールしたのですが、起動時(ログイン前)に Configuring syscons: keymap blanktime と表示され、長時間とまってしまって困っています。 その後ログインプロンプトが表示され、ログイン可能ですし、 その他の操作に問題も無い感じなのですが、毎度の事なので釈然としません。 解決方法は無いものでしょうか?それともこういうものなんのでしょうか? よろしくお願いいたします。 |
|
>>3705 hash > Configuring syscons: keymap blanktime の後の sendmail 起動時に固まっているものと思われます。 内容は若干グダグダですが、こちらをどうぞ。 http://home.jp.freebsd.org/cgi-bin/thread?mesid=%3c200308030422%2eAA02439%40nt%2em8%2edion%2ene%2ejp%3e てゆーかうちのマシンも sendmail 起動時に固まりますが、 めんどくさいので止まったら Ctrl-C を押してます。 |
|
>> 3706 早速のお返事ありがとうございます。 ご指摘頂いた通り、原因はメッセージの後のsendmailの起動でした。 > Configuring syscons: keymap blanktime のメッセージから検索しても、解決法が見つからないのはあたりまえでしたね。 ご紹介いただいたウェブサイトに目を通すのに時間がかってしまいましたが、 解決することができました。 私の場合はDNSサーバの指定部分で、ADSLモデムの提供しているDNSで解決しようとしていたのですが、 モデムのDNSサービスがIPv6に対応していない為、名前解決できずTime outを待っていたようです。 DNSサーバの指定をプロバイダーのアドレスにしたら解決しました。 起動する度に気になっていたので、すっきりしました。 どうも、ありがとうございます。 |
|
DESについて質問させて下さい。 OpensslコマンドでDESを使っているのですが、間違った鍵で復号しようとすると bad decryptというエラーがでます。パリティチェックはOKとします。 これはDESの仕様上、エラーが検出できるということなのでしょうか? DESというと単にビット単位の置換だと思っているので、エラーが検出できるのが ちょっと不思議です。 TripleDESの中ででも、いきなり関係無い鍵で復号したりしてますから、さらに 不思議です。 なにか根本的に理解が違っている気もするので、宜しければご教授ください。 |
|
>>3708 Sjr `bad decrypt' を出しているのは多分 rypto/evp/evp_enc.c の int EVP_DecryptFinal_ex(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl){ b=ctx->cipher->block_size; n=ctx->final[b-1]; if (n > b){ EVPerr(EVP_F_EVP_DECRYPTFINAL,EVP_R_BAD_DECRYPT); だと思います。PKCS#5 で定義されている操作に矛盾が発生すると このエラーが発生すると思っています。 ところで PKCS#5 の日本語訳のありかをご存知の方いらっしゃい ませんか? (解説している書籍でも可) 以前自分で訳してみたものの、 よく理解していないため何が何だかわからない日本語ができあがって しまいました。 |
|
68userさん、ご回答有難うございました。 恥ずかしながらPKCSというのは知りませんでした。PKCS#5というのは、 簡単に言うと文字列を鍵とする場合の決まりごと、みたいなものでしょうか? 頂いたソースやPKCS#5を斜め読みしてもまだ今一つピンときていません。 勉強したいと思います。 今のところなんとなく、PKCS#5でのPS(Padding String)についての記述を 見て、Padding ruleによってはエラーが検出できるのではと予想しています。 やっぱりアルゴリズムを見ていくしかないですねぇ… |
|
>>3710 Sjr > 簡単に言うと文字列を鍵とする場合の決まりごと、みたいなものでしょうか? 決まりごとというか、RSA が作った決めごとですね。 DES は 64bit のデータを暗号化・復号化する機能しか持っていません (だから DES は 64bit ブロック暗号)。 これでは 64bit を超えるデータを暗号化できないので、データを分割して 暗号化する方法の一つが CBC モード (FIPS PUB 81 で規定)。一方、データ 列が 64bit に満たない場合のパディング方法などを規定しているのが PKCS#5 です。 PKCS#5 でのパディングは データ1バイトの場合: A -> A 07 07 07 07 07 07 07 としてから暗号化 データ2バイトの場合: A B -> A B 06 06 06 06 06 06 としてから暗号化 : データ7バイトの場合: A B C D E F G -> A B C D E F G 01 としてから暗号化 データ8バイトの場合: A B C D E F G H -> A B C D E F G H 08 08 08 08 08 08 08 08 としてから暗号化 としていますね。 と書いているうちにわかったような気がしますが、 http://www.jp.freebsd.org/cgi/cvsweb.cgi/src/crypto/openssl/crypto/evp/evp_enc.c?rev=1.1.1.1.2.4 の EVP_DecryptFinal_ex が呼ばれるときの流れは 残りブロックサイズ = ctx->cipher->block_size; if (残りブロックサイズ > 1){ /* 残りはパディング部分のみ */ n=ctx->final[b-1]; /* 最後の 1バイトを読む。その値はパディング長であるはず */ if (n > b) /* パディング長が残りブロックサイズを超えているならエラー */ for (i=0; i<n; i++) パディング部分の値が全て n であることをチェック /* ここまできたら、パディング部分が正しいことがわかる */ n=ctx->cipher->block_size-n; /* パディング部分を除いたブロックサイズを取得 */ for (i=0; i<n; i++) /* パディング部分より前のデータについて出力バッファに書き出す */ out[i]=ctx->final[i]; てな感じでしょうか。 |
|
一応補足。 >>3708 Sjr > DESというと単にビット単位の置換だと思っているので、エラーが検出できるのが > ちょっと不思議です。 DES 自体は、鍵に含まれるパリティを以外の誤り検出機能はない、という 理解で正しいと思います。 しかし、PKCS#5 においては誤った鍵を使うと >>3711 68user > データ1バイトの場合: A -> A 07 07 07 07 07 07 07 としてから暗号化 > データ2バイトの場合: A B -> A B 06 06 06 06 06 06 としてから暗号化 この最後のデータ列 (06 06 06 06 06 06 など) がめちゃくちゃになって しまうため、パディングチェック時にエラーとなる、ということですね。 なお、PKCS#5 は DES に限らず、ブロック暗号一般に適用できます。ただし PKCS#5 は 64bit 暗号に特化した書き方がされているので、64bit 超暗号に 一般化したものが PKCS#7 に規定されています。 # と言っても、mod 8 とか書いてあるか、mod k と書いてあるかの違いしか # ないような気がしますけど。 |
|
x168userさん、詳細な説明ありがとうございます。 誤りの検出については、ほぼ理解できたと思います。 >データ8バイトの場合: A B C D E F G H -> A B C D E F G H 08 08 08 08 08 08 08 08 としてから暗号化 のところは意外でした。データが増えてしまうのでしょうか。 確かにこうしないとパディングされているのかされていないのかが 分からない、ということなのでしょうけど。 よくよく見ていくと色々と考えられていて面白いですね。 |
|
初歩的な質問です。 複数ファイルを1ファイルにcatで結合しようとしたところ次の問題が発生しました。 各ファイルのファイル名は20文字程あり、それら10ファイルをまとめて作成したい ファイル名も20文字程あります。cat以下コマンドを入力していくと、255文字で 入力不能となります。環境はSolarisへのTelnet接続、シェルはkshを使っています。 また、結合したい10ファイルは1つのディレクトリにある全てのファイルです。 ファイル名を短くするとか一度にやらないとか方法はあるでしょうが、画期的な方法が あれば宜しくお願いします。 |
|
>>3714 SS さん、 ファイル名に共通点ありますか? $ cat aaa.txt a b c $ cat bbb.txt 1 2 3 $ cat ccc.txt x y z $ cat *.txt a b c 1 2 3 x y z |
|
>>3714 SS Solaris8 では sh・ksh・csh いずれも 255 文字の制限があるようで、極めて 不愉快ですね。 ワイルドカード (glob) を使う以外の別解としては、文字数の制限がある のはコマンドラインからの入力時だけのようなので、シェルスクリプト内で #!/bin/ksh cat file-a file-b ..... > result などとすれば OK なようです。 あとは、tcsh や bash を使うとか。 |
|
シェルスクリプトで実現することにしました。ありがとうございました。 |
|
>>3717 SS 3716で68user様もさらっと書いてますが、ワイルドカードをを使用する事でも回避可能です。 % cat * > outfile それにしてもこんな制限があるとは知りませんでした。 で、確認してみたところ、255文字ではなく257文字まで入力できました。 ・・・・・・なんでこんなに中途半端なんでしょう? |
|
>>3074 68user 返事遅れて申し訳ありません。 回答ありがとうございます。 状況は、全く変化せずFIN_WAIT1の状態のまま残っています。 タイマーはないようです。 OSを再起動すればなくなるのでしょうが、それは出来ないので困っています。 強制的にクローズする方法はありませんでしょうか? apacheを再起動しても変化なしでした。 |
|
>>3719 lock であれば、NetBSD のバグだと思われます。 http://www.netbsd.org/Misc/query-pr.html#search と http://www.netbsd.org/MailingLists/ で検索してみましたが、 それっぽいものはありませんでした。 # FIN_WAIT_1 が残るというメールはありましたが、NetBSD 1.3.1 # 以前の問題のようです。 これ以上はわたしには全くわからないので、netbsd.org の メーリングリストで質問してみてはいかがでしょうか。 |
|
初めてメールします。CGIを用いてGREE.jpのようなものを作りたいと考えているのですが、何かいい案はございませんか? |
|
>>3721 大谷 現状何が問題なのかを提示せずに いきなり「何かいい案は?」と 問われても、何と答えればよいのかわかりません。 |
|
シェルスクリプト内の変数の使い方について教えて下さい。 環境は、HP-UX11.00で、Cシェルです。 a.cshとb.cshの2つのシェルがあり、 b.cshは、a.cshから呼ばれる動きです。 この時、a.csh内で設定した変数を、b.csh内でもしたいのですが 上手くいきません。 - a.csh ----------- #!/bin/csh set title = "test log" ./b.csh - b.csh ------ #!/bin/csh echo "Subject: $title" >> kekka.log echo "" >> kekka.log というように使いたいのですが、上手くできません。 よろしくお願いします。 |
|
>>3723 つる setenvしてください。 |
|
留学歴を調べててわかったんですが、 あべ晋三さんって Mac のノート(G4 パワーブック?)で Unix を使って日本を動かしてるらしい。 http://www.s-abe.or.jp/image/pc_desk.gif 「./configure; make new_japan; make install」ってのがすごいですね。 実装が知りたい (^^) ★ さて質問です。tcup という有名なレンタル掲示板に 「プログラム書き込みを禁止する」という設定項目があり、 これを有効にするといわゆるエロ広告がカットできるようなんですが、 どういう実装になってるんでしょうか。 HTTP-AGENT 環境変数とかだったらフツー偽装しますよね。 (いぜん PC を docomo の携帯に偽装して「グリコの抽選の応募」を 連続応募する裏ワザというのがあった) ていうか、Internet Explorer だってコンピューターのプログラムには 違いないわけで。どうやって判別できるんでしょう? |
|
>>3275 kotaro > 「./configure; make new_japan; make install」ってのがすごいですね。 何ヶ月か前にほうぼうでネタにされてましたね。configure と make は ; で なくて && でつなぐべきだとか、いったい何を grep してるんだとか、パス ワード入力時に何で * がエコーバックされるんだとか。 http://www.s-abe.or.jp/ の web も XOOPS を使っているようで、ページ 運営者がそういう系統の人なんでしょうね。 > 「プログラム書き込みを禁止する」 http://www.teacup.com/gbbs/l1new.shtml の「プログラム投稿(迷惑投稿)禁止」 のことですね。 http://8520.teacup.com/pon/bbs あれれ? 投稿者:PON 投稿日:10月10日(金)00時00分26秒 以降の発言を見るに、cookie を食べてくれるかとか、referer を 渡してくるかとか、Javascript を正しく解析してくれるかとか、 そういう感じの判定をしているものと思われます。 |
|
質問です。 Solaris8で、バックアップからのフルリカバリを行う際、 パーティションを作成した後にnewfsでファイルシステムの作成を行いますが、 このときSWAP領域にも、newfs /dev/rdsk/.....というようにファイルシステムを 作成するものなのでしょうか? vfstabファイルによると、SWAPはファイルシステムがufsでなくswapですので、どうなのかと思いまして。 googleで解説ページを検索すると、SWAPにnewfsを行っているサイトもあるのですが、 自分の持っている書籍では行っていません。 ちょっと分からなくなってしまったので、宜しくお願い致します。 |
|
>>3727 tt ufs ファイルシステムを作るわけではないので、newfs は不要です。 ファイルを swap として追加する場合も、 # mkfile 512m /foo/bar/swap512m # swap -a /foo/bar/swap512m と、ゼロ埋めのファイルを用意して swap -a するだけですので。 |
|
>>3728 68user様 ご回答ありがとうございます。 やはり不要なのですね。 ただ、それでもnewfsを行った場合、何か不具合が出るのでしょうか? 「不要」とは、「行っても問題無いが、する必要が無い」と言った意味になりますでしょうか。 swapをnewfsしている方は、その後問題無いのかなと思いまして。。 |
|
>>3729 tt newfsしても問題ないと思います。 ただし、実際にswapを使い始めると(書き込みが行われると) ufsとして書き込みに行かないので、結局ファイルシステムは破壊はされます。 よって、newfsする意味がありません。 |
|
C言語版FTPクライアントを実行させたところ、RETR後、レスポンスが2回続けて ありますが(150、226)、226のレスポンスが異常に遅いです(6分後)。 Solaris8、ProFTP(関係ないとおもいますが。。。)の構成です。 |
|
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」ということはできるでしょうか。 |
|
>>3731 marlboro ご報告ありがとうございます。 調べてみますが、 - どこからどこ宛の接続なのか (Solaris8 から localhost 宛?) - OS 付属の FTP クライアントでは問題ないのか - (インターネット上に公開されているサーバであれば) 相手のサーバ名 を教えていただけると助かります。 >>3732 すすむ HP-UX11.11 の /bin/awk で、 out="output_nnn.txt"; print "hoge"> out などと出力ファイルを指定できるようです。後は out の内容を 動的に変えていけばよいでしょう。 対象ファイルを切り替えるときは close(out) すればリソースの 無駄が省けてよいかもしれません。 |
|
>>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} |
|
>>3731 marlboro 手元の複数の環境で実験した限りでは再現しませんでした。 >>3733 68user をご参照の上、より詳細なご報告いただければ幸いです。 >>3734 すすむ ご自分で動作確認して、わからなければ再度質問してください。 |
|
>>3735 68user >ご自分で動作確認して、わからなければ再度質問してください。 失礼しました。 ありがとうございました。 希望通りの動きをしました。 |
|
>> 「./configure; make new_japan; make install」ってのがすごいですね。 > 何ヶ月か前にほうぼうでネタにされてましたね。configure と make は ; で > なくて && でつなぐべきだとか、 ごめんなさい、教えてください。 ;ではなく&&でつなぐとどうなるのですか? |
|
>>3737 kentarou 例として、「cmd1 && cmd2」とした場合は、 cmd1の戻り値が0の場合のみcmd2を実行します。 |
|
>>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 は行なわない という効果があるわけです。 |
|
Perl&CGIで授業の出席フォームを作成しようとしています。Perlは初心者です。 サーバーは、Windows2000+IIS+ActivePerl5.6.0で、ブラウザはIE6.0です。 クライアントマシンのIPアドレスを取得するPerlのコードでつまずきました。 inet_aton、gethostbyaddr、inet_ntoaの各関数を使ってIPアドレスを取得する コードを試しましたが、ブラウザIE6.0のプロキシ設定をしていれば、プロキシ のIPアドレスが取得でき、クライアントのIPアドレスが取得できません。もちろん プロキシの設定を外せば、クライアントのIPアドレスが取れます。プロキシを設定 した状態で、クライアントのIPアドレスを取得できる方法がありましたら、ご教示 ください。 |
|
>>3740 瓜倉 茂 > クライアントマシンのIPアドレスを取得するPerlのコードでつまずきました。 IP アドレスは $ENV{REMOTE_ADDR} で取得できますよね。FQDN (ホスト名) の 取得が目的ですか? それはそれとして、 > プロキシを設定した状態で、クライアントのIPアドレスを取得できる方法が > ありましたら、ご教示ください。 については >>3450 68user の「理屈的には、100% の精度の proxy 判定は不可能です」のくだりを 読んでください。 100% は無理と書きましたが、学内限定でなおかつあなたが管理者の立場なの であれば、必ず HTTP_X_FORWARDED_FOR を設定させるように proxy サーバの 設定変更するなどの手はあります。 ただ、根本的に信頼性がないので「web で出席を取る」という仕組みが妥当か どうかは微妙な気がします。 |
|
>>3733 68user 遅くなりました。すでに確認していただいているのですが。 >調べてみますが、 > - どこからどこ宛の接続なのか (Solaris8 から localhost 宛?) > - OS 付属の FTP クライアントでは問題ないのか > - (インターネット上に公開されているサーバであれば) 相手のサーバ名 >を教えていただけると助かります。 あて先は、同じネットワーク内に存在するサーバです。同じくSolaris8です。 UNIXのftpコマンド、Windowsのツール(FFFTP)では問題なく動作します。 #ftpコマンドでPASVで送受信する方法を知らないんですね。。。 サーバ側の問題とも考えにくいです。 |
|
コマンドを&&でつなぐ件、勉強になりました。 ありがとうございます。 |
|
68user様 早速のご回答ありがとうございます。Perlの使い方で問題が解決するのかと 思ってましたが、ネットワーク経由だと他のところも絡んでくるのですね。 Webにこだわらないで、出席を取る問題を再考してみます。 |
|
marlboro様 先ほどのNo.3744の内容は、No. 3742のmarlboro様へのお礼でした。 あて先を間違い失礼しました。改めてmarlboro様の回答にお礼申し 上げます。 |
|
>>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 でできます。 |
|
はじめまして。 ミラーリングの質問をさせていただきたいの ですが、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が実は実現できそう・・・ |
|
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で受信しています。 |
|
>>3748 hash > WEBサーバにはローカルIPアドレスでアクセスし、 > メールはWEBアプリからpostmaster@host.localdomainのように送信して、 > POPはOutlook Expressで受信しています。 度々すいません。 なんだか、意味のわからない文章になっていました。 現在は引用部分のように利用しているということです。 いろいろと面倒なので、何とかしたいと思って色々調べているのですが、 今のところ手がかりも見つからず質問させていただいた次第です。 |
|
>>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);を追加することは「切断をクライアント側から行う」ことにはなりません。 以上、まとまりがなく申し訳ありませんが、参考になれば幸いです。 |
|
初めて投稿します。 現在、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] を使用しています。 どなたか、原因や対応方法などわかる人がいたら、ご教示していただきたいと 思います。 よろしくお願いします。 |
|
お世話になります。 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」 の設定はコメントアウト等されていません。 他に何か設定すべき場所等ありますでしょうか? 宜しくお願い致します。 |
|
>>3752 bon /etc/default/inetdに ENABLE_CONNECTION_LOGGING=YES の指定が必要です。 |
|
>>3748 hash >WEBサーバにはローカルIPアドレスでアクセスし、 >メールはWEBアプリからpostmaster@host.localdomainのように送信して、 >POPはOutlook Expressで受信しています。 これが今の運用だとすると、 postmaster@host.localdomain と指定している時点でローカルのドメインを使えているように見えますが・・・ クライアントからホスト名でアクセスするだけだったら hostsファイルに指定してやれば良い気がします。 |
|
>> 3753 zsh様 やっと動きました! ありがとうございました。 |
|
>>3746 68user ありがとうございました。 動作確認できました。やはり6分待たされるんですよね。 >ProFTPD を相手にすると再現することがわかりました (一番 >最初に試すべきことでしたね)。 最初にお伝えするべきでした。 |
|
>>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 は使ったことがないため、たいしたことは言えなくて 申し訳ないです。 |
|
>>3751 TSURU こんばんは。 V3.0で通信できない、という件ですが、設定方法を変えたら、正常にV3.0で通信 できるようになりました。 具体的には、sendmail.cfにて、CipherList を設定する方法で、できるように なりました。 お騒がせしました。 68userさん、レスをいただきありがとうございます。 ありがとうございました。 |
|
>>3758 TSURU V3.0 と V3.1 で sendmail.cf を共用にしていたため、 V3.1 でしか使用できない Cipher を V3.0 で使おうとして エラーになっていた、ということでしょうか? |
|
>>3759 68user いや、それはないと思います。 sendmail.cfファイルも、V3.0用とV3.1用で別々に作成して、置き換えて使っています。 僕も、それほどSSLについて詳しいわけではありませんが、 SSLプロトコルバージョンと暗号化アルゴリズム(Cipher)は、直接は関連性はないように 思います。 おそらく、この認識で合っているとは思いますが。 |
|
>>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 を設定する方法 何と書くとうまくいかなくて、何と書くとうまくいったのか お教えいただけますか? |
|
>>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 のソースコードをいじらないままの状態です。) この方法で、正常に通信できるようになりました。 |
|
どなたかご教授下さい。 すでに動いているSolaris8の機器に新規Diskを追加し、Formatコマンドでパーティション切って、 labelしたあとにリブートする必要はありますか? リブートしないと反映しないのですかね? リブートは必要ないと思っていますが。。 |
|
>>3762 TSURU ありがとうございます。暇を見つけて試してみたいと思います。 >>3763 aits リブートして /etc/vfstab の内容が正しいことを検証しておく 方がよいと思われますが、リブートが必須かどうかと問われれば、 必須ではありません。リブートせずに、そのまま mount できます。 |
|
>>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でも処理が止まらずに進むことを確認できました。 |
|
unix上でzip圧縮した際にパスワードを設定したいのですが、 どなたかご存知な方いらっしゃいいますか? windowsだと基本的にzip圧縮の際にパスワードを設定できるように なっているのですが・・・。 一応manコマンドで調べると-eという暗号化のオプションが存在する ようなのですが出来ません。 環境はsolarisです。よろしくお願いします。 |
|
>>3754 zsh > クライアントからホスト名でアクセスするだけだったら > hostsファイルに指定してやれば良い気がします。 お返事ありがとうございます。 全クライアント(Win2000)のhostsファイルを変更するのは 大変(そんなに数はないのですが)なのでDNSにローカルのbindを指定して使っています。 ということは、bindのゾーン設定が悪いんですね。 とりあえず切り分けができたのでもう少し試行錯誤してみます。 報告できるようなことがあれば、また報告させていただきたいと思います。 ありがとうございました。 |
|
>>3766 初心者 $zip -e out.zip target.o Enter password: Verify password: adding: target.o (stored 80%) で出来ました。 RedHatですが、同じだと思います。 |
|
>>3766 初心者 > unix上でzip圧縮した際にパスワードを設定したいのですが、 Solaris 標準の zip は、おそらく暗号化ライブラリなしで コンパイルされていると思うんですよね。たぶん。 FreeBSD の ports http://www.jp.freebsd.org/cgi/cvsweb.cgi/ports/archivers/zip/Makefile?rev=1.29 を参考に、zcrypt29-exportable.zip を持ってきたり、 -DUSE_CRYPT を指定したりして自分でソースからコンパイル すれば大丈夫でしょう。 もしかしたら SunSite http://sunsite.tus.ac.jp/sun/solbin/ のバイナリパッケージが暗号化機能付きでコンパイルされて いるかもしれません (試していません)。 |
|
>>3769 68user Solaris標準・SunSiteのバイナリパッケージ共に暗号機能なしのようです。 |
|
Servlet を C の exe からソケットを使って起動させようとしているのですが うまく起動しません。 どなたかわかる方はいませんか? |
|
>>3771 den 情報不足です。 http://www.hyuki.com/writing/techask.html を読んでください。 |
|
日記。 今日は http://www.amazon.co.jp/exec/obidos/ASIN/475614389X/qid%3D1087134585/249-1275008-5298706 プログラミングテクニック - UNIXコマンドのソースコードにみる実践プログラミング手法 (UNIX MAGAZINE COLLECTION) を買いました。UNIX MAGAZINE に連載されていた記事をそのまま まとめただけですが、これでたまっていた UNIX MAGAZINE を捨て られるので、部屋が狭い人にはお勧めです。 ただ、この人の書く文章にはおもしろみのかけらもなく、全く読む 気にならないのが残念なところ。プログラミングって こんなに つまらないものだったかなぁ、と思えることうけあいです。 |
|
日記 2。 久々に whois.cgi なぞを触っていたら、FreeBSD 5.2.1-RELEASE の /usr/bin/whois は、いちいち NIC (Network Information Center) を 指定しなくても、 % whois u-tokyo.ac.jp で情報を参照できる。昔は % whois -h whois.nic.ad.jp u-tokyo.ac.jp としなくてはならなかったはずなのに何故? と思ってソースを読んだ 結果、 xxx.whois-servers.net (例えば TLD が jp だったら jp.whois-servers.net)。 の CNAME を引っ張ると、whois.nic.ad.jp が返ってくるので、 そこに再接続すればよいらしい。 あるいは % whois -h jp.whois-servers.net u-tokyo.ac.jp とすると whois-servers.net が proxy となって whois.nic.ad.jp から勝手に情報を取得してくれるようだ。 whois-servers.net に対応したのは、FreeBSD 4.0-RELEASE・ FreeBSD 3.4-RELEASE から。 http://www.jp.freebsd.org/cgi/cvsweb.cgi/src/usr.bin/whois/whois.c |
|
dateコマンドでは、最大何日前までの日付計算が行えるのでしょうか? 教えてください。 |
|
Solaris(UNIX)でフォルダの削除が行えません。 rmdir フォルダ名のコマンドでは「ディレクトリが存在しません。」 のメッセージがでます。CPコマンドで同じフォルダを同じ場所にコピーすると 同じ名前のファルダが2つできてしまいます。 このフォルダの消し方をどなたか教えていただけないでしょうか。 |
|
>>3776 yoko こんばんは。 rm -r <ディレクトリ名> で削除できませんか? |
|
ソースを載せます。 //*************************************************************** // From the book "Win32 System Services: The Heart of Windows 95 // and Windows NT" // by Marshall Brain // Published by Prentice Hall // // Copyright 1995, by Prentice Hall. // // This code implements a TCP sender. //*************************************************************** // ssipsend.cpp #include <windows.h> #include <iostream.h> #include <winsock.h> #define NO_FLAGS_SET 0 #define PORT (u_short) 8080 #define DEST_IP_ADDR "127.0.0.1" #define MAXBUFLEN 256 INT main(VOID) { WSADATA Data; SOCKADDR_IN destSockAddr; SOCKET destSocket; unsigned long destAddr; int status; int numsnt; char toSendtxt[3][256]; int numrcv; char buffer[MAXBUFLEN]; strcpy( toSendtxt[0], "GET http://localhost:8080/example00/HitTime?userid=1207&date=20004/06/11%2008:30:00 HTTP/1.1\r\n" ); strcpy( toSendtxt[1], "Host: localhost:8080\r\n" ); strcpy( toSendtxt[2], "\r\n" ); /* initialize the Windows Socket DLL */ status=WSAStartup(MAKEWORD(1, 1), &Data); if (status != 0) cerr << "ERROR: WSAStartup unsuccessful" << endl; /* convert IP address into in_addr form */ destAddr=inet_addr(DEST_IP_ADDR); /* copy destAddr into sockaddr_in structure */ memcpy(&destSockAddr.sin_addr, &destAddr, sizeof(destAddr)); /* specify the port portion of the address */ destSockAddr.sin_port=htons(PORT); /* specify the address family as Internet */ destSockAddr.sin_family=AF_INET; /* create a socket */ destSocket=socket(AF_INET, SOCK_STREAM, 0); if (destSocket == INVALID_SOCKET) { cerr << "ERROR: socket unsuccessful" << endl; status=WSACleanup(); if (status == SOCKET_ERROR) cerr << "ERROR: WSACleanup unsuccessful" << endl; return(1); } cout << "Trying to connect to IP Address: " << DEST_IP_ADDR << endl; /* connect to the server */ status=connect(destSocket, (LPSOCKADDR) &destSockAddr, sizeof(destSockAddr)); if (status == SOCKET_ERROR) { cerr << "ERROR: connect unsuccessful" << endl; status=closesocket(destSocket); if (status == SOCKET_ERROR) cerr << "ERROR: closesocket unsuccessful" << endl; status=WSACleanup(); if (status == SOCKET_ERROR) cerr << "ERROR: WSACleanup unsuccessful" << endl; return(1); } cout << "Connected..." << endl; int idx = 0; while(1) { Sleep(1000); cout << "Sending..." << endl; numsnt=send(destSocket, toSendtxt[idx], strlen(toSendtxt[idx]) + 1, NO_FLAGS_SET); if (numsnt != (int)strlen(toSendtxt[idx]) + 1) { cout << "Connection terminated" << endl; status=closesocket(destSocket); if (status == SOCKET_ERROR) cerr << "ERROR: closesocket unsuccessful" << endl; status=WSACleanup(); if (status == SOCKET_ERROR) cerr << "ERROR: WSACleanup unsuccessful" << endl; return(1); } idx++; if(idx>2){ break; } /* Wait before sending the message again */ //Sleep(4800); } /* while */ return 0; } それほど難しいことはしていないはずなのですが... よろしくお願いします。 |
|
>> 3771 Servletって、JavaのServletのことですよね? なぜ、わざわざCのプログラムからServletを起動する必要があるのですか? そこが分かりません。 |
|
>>3776 yoko ディレクトリを作成した時にディレクトリ名にスペースとか コントロールコード(^hとか)が入ってしまったってことはないですか? とりあえず そのディレクトリ上位の階層でls -l > hoge.lst としてvi hoge.lst を表示もしくはod -x hoge.lstあたりで 確認されてみてはいかがでしょうか? 外してしたらスミマセン |
|
>> 3779 TSURU なぜ、わざわざといわれるとどう答えていいのかわからないのですが。 サーブレットは、起動されるとデータベースに時刻を登録するようにできています。 それでタイムカードのように出社時間と退社時間を記録してゆこうとしているのです。 そのときにわざわざブラウザを立ち上げてフォームのボタンを押してサーブレットを 起動するのは面倒らしいので、スタートアップにEXEをと登録して、 パソコンが起動するとサーブレットを呼び出すようにしようとしています。 という回答でよいでしょうか。 よろしくお願いします。 |
|
>> 3779 TSURU ちなみになぜ、Cでやろうとしているかというと、Java だと各パソコンに JREをインストールしてやらなければならないかなと思っているので それが面倒なのでCを使おうとしています。 |
|
>>3775 kiyo > dateコマンドでは、最大何日前までの日付計算が行えるのでしょうか? FreeBSD の date は 1900 年まででした。他の OS でも、time_t の仕組みに のっけているなら、同じでしょうね。てゆーか OS 名くらい書きましょうね。 >>3776 yoko > Solaris(UNIX)でフォルダの削除が行えません。 ファイルの特定方法もいろいろあるので参考にしてください。 http://www.jp.freebsd.org/QandA/HTML/1671.html >>3778 den > ソースを載せます。 どこでどういうふうにエラーになるんですか? 「うまく起動しません」 とはどういう意味ですか? OS は? ブラウザで該当 URL を見ると正しく 記録されるのですか? …などという点が情報不足なのですよ。期待した結果と実際の結果を書けと http://www.hyuki.com/writing/techask.html にもあったはずです。 ソースをざっと見た感じでは怪しげなところはないように見えますが、 わたしの手元に Windows 開発環境がなくコンパイルできないので、 どなたかコンパイルして検証できる環境をお持ちの方がいらっしゃい ましたらよろしくお願いします。 >>3779 TSURU > なぜ、わざわざCのプログラムからServletを起動する必要があるのですか? C で HTTP クライアントを作るって話なので、別に変ではないです。 |
|
OS は、クライアント、サーバともに Windows 2000 Professtional 又は Windows XP Professtional です。 Tomcat は、Tomcat/4.1.27 です。 サーブレットに動作したことがわかるようにコンソールへの出力が組み込んであるので 起動したことは、コンソールを見るとわかるようになっています。 ブラウザでサーブレットの URL をたたいた場合は、ちゃんとコンソールへの 出力がでて、起動していることがわかります。 |
|
>> 3783 HTTP は、ここで改行しないとダメだとかこういう順番でテキストを 送らないとダメだとかどういうルールがあるのでしょうか? |
|
>> 3783 改行を入れるようにしたらレスポンスは返すようになってのですが、 やはりサーブレットは起動しません。 OS は、サーバ、クライアントともに Windows 2000 Professtional か Windows XP Professtional です。 Tomcat は、Apache Tomcat/4.1.27 です。 起動するというのは、コンソールに文字が出力されるということです。 ブラウザで同じことをした場合は、ちゃんと起動します。 |
|
>> 3783 レスポンスは、 HTTP/1.1 505 HTTP Version Not Supported Content-Type: text/plain Date: Tue, 15 Jun 2004 06:24:28 GMT Server: Apache Coyote/1.0 Connection: close ・・・・・・ です。 |
|
>> 3783 リクエストの2行目の strcpy( toSendtxt[1], "Host: localhost:8080" ); を削除したらうまく行きました。 どうもありがとうございました。 |
|
>>3786 den > 改行を入れるようにしたらレスポンスは返すようになってのですが、 全くついていけません。具体的にどこをどういうふうに修正したんですか? ふと思いましたが、 >>3778 den > numsnt=send(destSocket, toSendtxt[idx], > strlen(toSendtxt[idx]) + 1, NO_FLAGS_SET); この +1 は不要では? |
|
はじめまして。まだ初めて1ヶ月の初心者です。 すいませんがどうしてもエラーメッセージの意味がわからないので、教えていただかないでしょうか? OSはSolarisの5.8です。 -------------------------------------------------------------------------------- ucbcc: 警告: ld が起動される場合は、オプション -YP,:/usr/ucblib:/opt/SUNWspro/WS 6U2/bin/../lib:/opt/SUNWspro/WS6U2/bin:/usr/ccs/lib:/usr/lib は ld に渡されます 。それ以外は無視されます ld: 警告: オプション -YP が複数回存在します。最初の設定で行います。 -------------------------------------------------------------------------------- というものでした。特にldというものがいまいち理解できないのですが、ぜひとも教えてただければと思います。よろしくお願いします。 |
|
>> 3786 HTTP 1.0 以降では、ヘッダと本文を空行で分けているらしく、その空行が ないためにレスポンスがないことがわかりました。 その後、HTTP Version Not Supported というレスポンスが返されるだけ だったのですが、リクエストを "POST <<URL>> HTTP1.1" と空行だけに したところちゃんとしたレスポンスを返すようになりました。 |
|
>>3783 68user >C で HTTP クライアントを作るって話なので、別に変ではないです。 いえ、僕は、サーバ上にある、Servletのプロセスを起動する処理を Cのプログラムの中で実装する話だと思ってしまったので、 おかしいと思ったんですよ。 |
|
denさんへ 根本的な話をしていいですか? >>3781 den の発言を読むかぎりでは、denさんのやりたいことは、 出社時間と退社時間を記録したいということですよね。 それだけのために、なぜサーブレットが必要になるんですか? そこが分からないんですよ。 出社時間と退社時間を記録するだけだったら、別にサーブレット を使わなくても、方法はいくらでもありますよね。 どうしてもサーブレットじゃないとだめなんですか? でも、もうできたんですよね。 だったら、無理に他の方法でやれとは言いませんが、 ただ気になったので、書いてみました。 |
|
denさんへ >>3793 TSURU の書き込みは、べつにあげあしとりとか、意地悪をするために書いたのではありません。 あくまで、単に疑問に思ったことを書いただけですので、くれぐれも誤解なきよう お願いします。 |
|
>> 3793 話がややこしくなりそうなのであまり追求しようとは思わないのですが、 サーブレット以外にもやり方はあると思います。 ただインターネットエクスプローラから時間の記録ができたら便利かなと思って そのようにしました。 でも仮で運用しているとそれでは使いづらいといわれてしまったので、 既存のサーブレットを利用して、C で起動する処理を作って済まそうと 思ったわけです。 サーブレットは、HTTPのリクエストをサーブレットコンテナが受信すれば 起動されるのでサーブレットを起動するには、HTTPクライアントとして リクエストを送るだけでいいのです。 どうもありがとうございました。 |
|
>>3795 den なるほど。 細かい事情は分かりませんが、サーブレットを起動することで 済ませたかった訳ですね。 ゼロから実装するより、既存のもので済ませた方がずっど楽ですからね。 分かりました。 |
|
>>3776 yoko 返事遅くなりました。No.3776 yokoです。 No. 3783 # 68user No. 3780 # とーりすがり No. 3777 # TSURU さん、レスありがとう。 ls -l > hoge.lst で調べるとtest^Mといった(^M)がついていました。 原因は分かりましたが、まだ格闘中です。 rm -r test^M rm -r 'test^M' rmdir 'test^M' でも消えないんですよね。 rm-r |
|
>>3776 yoko 3776で投稿した yokoです。 rm -r test^Mで消えませんでしたがrm -r test*で消す事ができました。 皆さん、 ありがとうございました。 |
|
RSA暗号についての質問なんですが、公開鍵とモジュロは分かるんですよね。 それならば、どういう頻度で循環しているか分かってしまうのではないでしょうか? 循環する頻度と公開鍵があれば秘密鍵も分かってしまうのでは・・? |
|
>>3790 どら まず、以下の質問に答えてください。 - gcc をインストールしていますか? - Sun のコンパイラをインストールしていますか? (/opt/SUNWspro/bin/cc などが存在しますか?) - which cc と which ld の結果は? - echo $PATH の結果は? - 「あなたは」どのコンパイラを使ってコンパイルしようとしていますか? (gcc or Sun の cc) - 実際に使用されていると思われるのはどのコンパイラですか? また、その根拠は? >>3797 yoko > ls -l > hoge.lst で調べるとtest^Mといった(^M)が > ついていました。 ^M はエスケープシーケンス \r (0x0d) です。シェルから 入力する場合は sh なら % rm test(Ctrl-v Ctrl-m) tcsh なら % rm test(Ctrl-v Ctrl-j) とします。csh はどっちだか知りません。 ところでなぜ tcsh は Ctrl-j が ^M で、Ctrl-m が ^J なんでしょうね? >>3799 kou > RSA暗号についての質問なんですが、公開鍵とモジュロは分かるんですよね。 > それならば、どういう頻度で循環しているか分かってしまうのではないでしょうか? えーと、そういうことはないんですが、何と説明すればよいか わかりません。 秘密鍵: e, n 公開鍵: d, n 暗号化: (平文^e)%n 復号化: (暗号文^d)%n として、今、平文と e が不明だとします。何をどうすると、 何がどういうふうに循環すると考えておられますか? なお、(平文^e)%n という操作は単射です。つまり異なる平文が 同じ値になることはありません。 もし数学的に厳密な証明を期待しておられるなら、わたしには その能力がないので、 http://www.faireal.net/ での質問をお勧めします。 |
|
>>3800 68user 68userさん、レスありがとうございます。 質問に答えさせていただきます。 (1)gcc をインストールしていますか? gccというもの自体はわかりませんが、fccとccはインストールしてあるみたいです。(すいません、学校のものなので・・・) (2)Sun のコンパイラをインストールしていますか? (/opt/SUNWspro/bin/cc などが存在しますか?) /opt/SUNWspro/bin/ccはディレクトリの中にありました。 (3)which cc と which ld の結果は? which cc:/usr/ucb/cc which ld:/usr/ucb/ld という結果でした。 (4)echo $PATH の結果は? /bin /usr/bin /usr/ucb /etc /opt/SUNWspro/bin /opt/FSUNf90/bin /disk2/user/md/gnuplot という結果でした。 (5)「あなたは」どのコンパイラを使ってコンパイルしようとしていますか? (gcc or Sun の cc) いままでの練習ではccでコンパイルしていました。これからもccでコンパイルするつもりです。 (6)実際に使用されていると思われるのはどのコンパイラですか? また、その根拠は? 上にも書きましたが、いままではccのコンパイラでコンパイルしていたので、ccのコンパイラだと思います。 さきほどgccについて調べた所、GNUが関連しているみたいでした。これから先にGNUplotを使用してグラフも書きたいと思っているのですが、 それについても何かアドバイスをいただければありがたいと思います。よろしくお願いします。 |
|
>>3801 どら あらそうですか。予想と外れていたのでもうひとつ追加で質問。 >>3790 どら > ucbcc: 警告: ld が起動される場合は、オプション -YP,:/usr/ucblib:... ここだけでなく、コンパイルしてからコンパイルが終わるまで全ての 部分を見せてください。Makefile を使っているにせよ、自分でタイプ したにせよ、とにかく全部見せてください。 > これから先にGNUplotを使用してグラフも書きたいと思っているのですが、 紛らわしいですが、gnuplot は GNU とは関係ありません。 GNU というのは、フリーなソフトウェアが大好きな FSF という団体が提唱するソフトウェアのライセンス方式の ことを指します。gcc も GNU ライセンスで配布されています。 しかし gnuplot はそうではありません。 あと、gcc と gnuplot は関係ないです。gcc はコンパイラ。 gnuplot はグラフ描画ソフト。 |
|
はじめまして、こんにちは。いきなりで非常に申し訳ないのですが、socketのインクルードファイルはどこでダウンロードしたらいいのでしょうか?もしくは、どのOSになら入っているのでしょうか? |
|
>>3803 鼈 わたしの知る限りでは、UNIX 系であれば標準で入っています。 Windows 系であれば、VC++ や C++ Builder などのコンパイラに 添付されているのかな? |
|
UNIXの<sys/socket.h>の様なファイルは windowsでどこにあるのですか windowsで<sys/socket.h>をインクルードしてもファイルが開けない というようなメッセージがでてしまいます。 |
|
> 秘密鍵: e, n > 公開鍵: d, n > 暗号化: (平文^e)%n > 復号化: (暗号文^d)%n > >として、今、平文と e が不明だとします。何をどうすると、 >何がどういうふうに循環すると考えておられますか? nを生成するのがp,qで、それらの最小公倍数がe,dだという私の認識自体が間違っていたのでしょうか^^; 一定の頻度で循環しているから、それ以内の適当な数eでべき乗しても補完関係にあるd(最小公倍数-e)で復号化できる。 平文に「1,2,3・・」といった具合に数を代入していけば循環周期が分かるのでは?と思ったのです |
|
>>3805 蒲鉾 > UNIXの<sys/socket.h>の様なファイルはwindowsでどこにあるのですか winsock.h ですが、Windows の場合は他にもいろいろと書き方が 異なります。「winsock」で検索して、よさそうなサンプルを 探してください。 もっとも信頼できると思われるサンプルは http://www.kt.rim.or.jp/~ksk/wskfaq-ja/examples/basics/ でしょうが、ライブラリ化してあるのでわたしは初心者には わかりやすいとは思いませんが、もし理解できるならこれを 参考にするのがよいでしょう。 >>3806 kou > nを生成するのがp,qで、それらの最小公倍数がe,d 誤りと思われます。 http://x68000.startshop.co.jp/~68user/net/crypt-2.html の「RSA の本当のところ」を読んでください。 もう少し正確に、かつ数学的に書くと、 p,q: 素数 n: n=pq e: 1<e<(p-1)(q-1) かつ gcd(e, (p-1)(q-1))=1 を満たす自然数 d: 1<d<(p-1)(q-1) かつ de≡1 (mod (p-1)(q-1)) を満たす自然数 として求めます。 # gcd(e, (p-1)(q-1))=1 は、e と (p-1)(q-1) が共通の約数を持たないということ。 # de≡1 (mod (p-1)(q-1)) は、d*e を (p-1)(q-1) で割った余りが 1 であるということ。 |
|
>>68user 何度もありがとうございます。 “ex3-2.c”というファイルを“keisan3-2”としてコンパイルした結果を載せさせていただきます。 -------------------------------------------------------------------------------- tds1% cc -o keisan3-2 ex3-2.c ucbcc: 警告: ld が起動される場合は、オプション -YP,:/usr/ucblib:/opt/SUNWspro/WS 6U2/bin/../lib:/opt/SUNWspro/WS6U2/bin:/usr/ccs/lib:/usr/lib は ld に渡されます 。それ以外は無視されます "ex3-2.c", 16 行目: 警告: ファイルの最後に改行文字がありません ld: 警告: オプション -YP が複数回存在します。最初の設定で行います。 --------------------------------------------------------------------------------- 以前実行した時はうまくいったのですが、いつの間にかできなくなりました。 あと、上の文章の中で“16行目:〜ありません”という警告文もどのプログラムにも発生するみたいです。(この警告も以前はありませんでしたし、ファイルの中身はかえてないはずです。) 一応、簡単な文章でもうしわけないのですが、プログラムも載せさせていただきます。(教科書のコピーです…) --------------------------------------------------------------------------------- /* 【例題3.2】 rei3_2 */ #include <stdio.h> main() { int a,b; printf("異なる2つの整数を入力してください--->"); scanf("%d %d",&a,&b); if(a > b) printf("%d --- BIG\n",a); else printf("%d --- BIG\n",b); return(0); } ----------------------------------------------------------------------------------- よろしくお願いします。 |
|
>>3808 どら たびたびすみませんが、 % sh -x /usr/ucb/cc -v -o keisan3-2 ex3-2.c の結果 (全文) を教えてください。 あと、env の結果も教えてください。ホスト名やログイン名などを 公開するのが嫌なら、適当に削ってから提示してください。 これ以上引っ張ると怒られそうなので、一部回答しておきますが、 > ucbcc: 警告: ld が起動される場合は、... 無視されます > ld: 警告: オプション -YP が複数回存在します。最初の設定で行います。 これは警告なので、実行には支障がないはずです。keisan3-2 が 生成されていませんか? > "ex3-2.c", 16 行目: 警告: ファイルの最後に改行文字がありません これは文字通り、ファイルの最終行が改行コードが付いて いないのでしょう。ファイルの最終行の末尾で改行してください。 ファイル末尾に改行がないとその行を読んでくれないプログラムも あるので、改行をつける癖をつけておくことをお勧めします。 |
|
>>3809 68user 何度もありがとうございます。このミスが見つからないと先に進みづらいので、教えていただけるのなら、どれだけ質問されても怒ったりしません。むしろどれだけでも聞いてください。お願いします。 % sh -x /usr/ucb/cc -v -o keisan3-2 ex3-2.cの結果を下に書きます。 ------------------------------------------------------------------------------ + [ -f /usr/ccs/bin/ucbcc ] + [ 4 -eq 0 ] UCB_LIB_DIR=/usr/ucblib CCS_LIB_DIR=/usr/ccs/lib USR_LIB=/usr/lib TYPE= dopt= cgdir= + [ x = x ] LD_RUN_PATH=/usr/ucblib + export LD_RUN_PATH + [ = -Bstatic ] LIBS=-lucb -lsocket -lnsl -lelf -laio + + awk/usr/bin/ls -ln /usr/ccs/bin/ucbcc{print $11} cclink=/opt/SUNWspro/WS6U2/bin/acc + /usr/bin/dirname /opt/SUNWspro/WS6U2/bin/acc ccdir=/opt/SUNWspro/WS6U2/bin + [ != ] nccdir=/opt/SUNWspro/WS6U2/bin/../lib:/opt/SUNWspro/WS6U2/bin LD_LIBRARY_PATH=/usr/ucblib:/usr/ccs/lib:/usr/lib + export LD_LIBRARY_PATH + /usr/ccs/bin/ucbcc -Xs -YP,:/usr/ucblib:/opt/SUNWspro/WS6U2/bin/../lib:/opt/SU NWspro/WS6U2/bin:/usr/ccs/lib:/usr/lib -v -o keisan3-2 ex3-2.c -I/usr/ucbinclude -lucb -lsocket -lnsl -lelf -laio ucbcc: 警告: ld が起動される場合は、オプション -YP,:/usr/ucblib:/opt/SUNWspro/WS 6U2/bin/../lib:/opt/SUNWspro/WS6U2/bin:/usr/ccs/lib:/usr/lib は ld に渡されます 。それ以外は無視されます ### コマンド行ファイルおよびオプション (展開済み): ### -v -o keisan3-2 ex3-2.c -I/usr/ucbinclude -lucb -lsocket -lnsl -lelf -laio ### ucbcc: 注釈: LM_LICENSE_FILE = (null) ### ucbcc: 注釈: NLSPATH = /opt/SUNWspro/WS6U2/bin/../lib/locale/%L/LC_MESSAGES/ %N.cat:/opt/SUNWspro/WS6U2/bin/../../lib/locale/%L/LC_MESSAGES/%N.cat /usr/ccs/lib/cpp -undef -D__SunOS_5_8 -D__SUNPRO_C=0x510 -Dunix -D__unix -Dsun - D__sun -D__BUILTIN_VA_ARG_INCR -D__SVR4 -Dsparc -D__sparc -I/usr/ucbinclude ex3- 2.c >/tmp/cpp.20856.0.i /opt/SUNWspro/WS6U2/bin/acomp -Qy -y-o -yex3-2.o -I/usr/ucbinclude -g "/opt/SUNW spro/WS6U2/bin/acc -Xs -YP,:/usr/ucblib:/opt/SUNWspro/WS6U2/bin/../lib:/opt/SUNW spro/WS6U2/bin:/usr/ccs/lib:/usr/lib -v -I/usr/ucbinclude -c" -b -y-fbe -y/opt/ SUNWspro/WS6U2/bin/fbe -y-xarch=generic -y-xmemalign=4s -y-verbose -Xs -D__SunOS _5_8 -D__SUNPRO_C=0x510 -Dunix -Dsun -Dsparc -D__unix -D__sun -D__sparc -D__BUIL TIN_VA_ARG_INCR -D__SVR4 -y-s -I/opt/SUNWspro/WS6U2/include/cc -i /tmp/cpp.20856 .0.i "ex3-2.c", 16 行目: 警告: ファイルの最後に改行文字がありません rm /tmp/cpp.20856.0.i ### ucbcc: 注釈: LD_LIBRARY_PATH = /usr/ucblib:/usr/ccs/lib:/usr/lib ### ucbcc: 注釈: LD_RUN_PATH = /usr/ucblib ### ucbcc: 注釈: LD_OPTIONS = (null) /usr/ccs/bin/ld -o keisan3-2 /opt/SUNWspro/WS6U2/lib/crti.o /opt/SUNWspro/WS6U2/ lib/crt1.o /opt/SUNWspro/WS6U2/lib/values-xs.o -Y P,/opt/SUNWspro/WS6U2/lib:/usr /ccs/lib:/usr/lib -YP,:/usr/ucblib:/opt/SUNWspro/WS6U2/bin/../lib:/opt/SUNWspro/ WS6U2/bin:/usr/ccs/lib:/usr/lib ex3-2.o -lucb -lsocket -lnsl -lelf -laio -lc /op t/SUNWspro/WS6U2/lib/crtn.o ld: 警告: オプション -YP が複数回存在します。最初の設定で行います。 rm ex3-2.o ret=0 + exit 0 ------------------------------------------------------------------------- envの結果も書かせていただきます。 ------------------------------------------------------------------------- HOME=/disk2/user/md PATH=/bin:/usr/bin:/usr/ucb:/etc:/opt/SUNWspro/bin:/opt/FSUNf90/bin:/disk2/user/ md/gnuplot:. LOGNAME= HZ=100 TERM=vt100 TZ=Japan SHELL=/bin/csh MAIL=/var/mail/md LANG=ja _INIT_NET_STRATEGY=none _INIT_PREV_LEVEL=S _INIT_RUN_LEVEL=3 _INIT_RUN_NPREV=0 _INIT_UTS_ISA=sparc _INIT_UTS_MACHINE=sun4u _INIT_UTS_NODENAME= _INIT_UTS_PLATFORM=SUNW,Sun-Blade-1000 _INIT_UTS_RELEASE=5.8 _INIT_UTS_SYSNAME=SunOS _INIT_UTS_VERSION=Generic_108528-27 PWD=/disk2/user/md USER=md LD_LIBRARY_PATH=/opt/FSUNf90/lib:/opt/SUNWspro/lib MANPATH=/opt/FSUNf90/man:/opt/SUNWspro/man ------------------------------------------------------------------------- という結果でした。 >>ucbcc: 警告: ld が起動される場合は、... 無視されます >>ld: 警告: オプション -YP が複数回存在します。最初の設定で行います。 >これは警告なので、実行には支障がないはずです。keisan3-2 が >生成されていませんか? はい、ファイルはできています。実行すれば結果も出力されています。ただ、毎回この警告文がでていて、どれぐらい問題なのかどうかもわからないので、できるかぎり問題を取り除くことと、その理由が知りたいので… >ファイル末尾に改行がないとその行を読んでくれないプログラムも >あるので、改行をつける癖をつけておくことをお勧めします。 初めてしりました。ありがとうございます。気をつけます。 あと、もしお手数でなければ、今までされた質問の意図を教えていただければありがたいと思うのですが…手間がかかるようでしたら全然かまいませんので、よろしくお願いします。 それではまたよろしくお願いします。 |
|
>>3810 どら 結局、よくわかりませんでした。 Solaris の /usr/ucb/cc はシェルスクリプトで、/usr/ccs/bin/ucbcc を起動しています。/usr/ccs/bin/ucbcc は /opt/SUNWspro/WS6U2/bin/acc へのシンボリックリンクになっているはず。ですから、 ucbcc: 警告:... というのは acc が出力しているわけです。 コンパイラは http://x68000.startshop.co.jp/~68user/unix/pickup?gcc にあるように、プリプロセス・コンパイル・アセンブル・リンクという ステップを踏みます。提示していただいた例だと、最初に /usr/ccs/bin/ucbcc (実体は /opt/SUNWspro/WS6U2/bin/acc) が実行され、それが /usr/ccs/lib/cpp (プリプロセッサ) /opt/SUNWspro/WS6U2/bin/acomp (コンパイラ) /usr/ccs/bin/ld (リンカ) を順次起動しています。 # この場合、アセンブルはコンパイラの中で行われています。 で、 ucbcc: 警告: ld が起動される場合は、オプション .. は ld に渡されます。... というのは、最初に起動された ucbcc が -YP,.. というオプションを 理解できなかったため、 「わたしの知らないオプションだけど、今から起動する ld ならこの オプションを理解できるかもしれないので、ld に -YP を渡します」 と言っているわけです。ただし、cc に -c オプションをつけたりすると リンクは行われないため、そういうときに備えて 「ld を実行しないようなオプションを指定された場合は ld が 実行されないので、結果的に -YP オプションは無視されます」 とも言ってます。 で、 > ld: 警告: オプション -YP が複数回存在します。最初の設定で行います。 についてですが、-YP オプションは ld に渡されます。実行結果を 見るとなぜか /usr/ccs/bin/ld に -YP が 2つ渡されてしまって います。-YP オプションは、ライブラリを検索するディレクトリを 指定するものなので、ld は 「ライブラリを検索するディレクトリが 2つ指定されているので、 後の方を無視して、最初の方を使います」 と警告しています。 なぜ -YP オプションが複数渡されるのかを知りたいため、-v オプションを つけてもらったり、env で環境変数を見せてもらったりしましたが、怪しげ なものを見つけることはできませんでした。 > 特にldというものがいまいち理解できないのですが ld はリンカです。例えば >>3868 jeiu で printf や scanf などの関数を使っていますが、これらの関数は OS の機能として用意されているものではありませんし、コンパイラが 内蔵している機能でもありません。 /usr/lib/ の下に *.a や *.so などのファイルがあると思いますが、 ここにコンパイル済の printf や scanf が入っており、それと結合 しているわけです。それらのライブラリ関数と、あなたが作った プログラムを結合するのがリンカの仕事で、コンパイル済の printf や scanf はどのディレクトリに置いてあるかを指定するのが -YP オプションです。 だらだらと書いてきましたが、ぶっちゃけて言うと一般的な解決方法は Solaris では /usr/ucb/cc を使わず、/opt/SUNWspro/bin/cc を 使う。できれば PATH から /usr/ucb/cc を削除した方がよい というもので、これはよく知られたノウハウです。/usr/ucb は SunOS4 時代 (20年くらい前) との互換性のためのディレクトリで あって、今どき積極的に使う必要性はありません。 ただ、わたしは根本的な原因を知りたかったので しつこく聞いて みたのですが、実を結ばなかったようで誠に残念です。 以下は余談ですが、あなたの環境のコンパイラはおそらく Forte C update 2 という Sun の製品です。わたしの手元には Solaris2.6 + Sun Workshop (Forte C の前バージョン。Sun の製品) がありますが、いくら頑張っても 同じエラーメッセージを出すことができませんでした。 よって、多分 Forte C の不具合ではないかと予想しています。 |
|
>>3811 68user >>3810 どら 富士通のコンパイラも入っていそうだという事が気になるのですが・・・ /usr/ccs/bin/ucbcc は Forte へのシンボリックリンクになってますか? |
|
>>3812 zsh > 富士通のコンパイラも入っていそうだという事が気になるのですが・・・ /opt/FSUNf90/bin とかですか? Fortran のコンパイラと見たので 特に関係はないかと判断したのですが、どうなんでしょうね。 |
|
>>3811 68user お手数をおかけしてすいませんでした。 説明がわかりやすくてうれしかったです!! PATHから/usr/ucb/ccを削除してみました。 そしたらいままでの警告文はなくなりました!!ありがとうございました。 しかし今までになかった警告文がでました。 ------------------------------------------------------------------- "ex3-1.c", 3 行目: 警告: 指令中に無効な空白文字があります ------------------------------------------------------------------- というものでした。今まではこんな警告もなかったし、3行目の空白も見当たりません。 この前載せたプログラムと同じものなのですが、#includeと<stdio.h>の間の空白を消してみましたが同じでした。 またなにか問題なのでしょうか?他の例題に関してもまったくおんなじ警告文がでます… この形の警告文はたいていプログラムの問題だったので、プログラムをいじれば解決していたのですが… あと、もしよろしければ、gnuplotの使い方も教えていただければうれしいのですが… いろいろなホームページ上の例題をやってみたのですが、どれもうまくいかなくて… (特に、Cのプログラムをgnuplotに出力させたいのですが、gnuplot本体を置くディレクトリの場所とか、リンクの仕方とか…) もし時間があればでけっこうですので、少し教えていただけないでしょうか。よろしくお願いします。 |
|
>>3814 どら > "ex3-1.c", 3 行目: 警告: 指令中に無効な空白文字があります ソースを少しずつ削って、この警告が出る場所を特定してください。 問題の行を特定したけれども原因がわからない場合は、 % od -cx < ex3-1.c (最小限まで削ったファイル) として、変な文字が入っていないか確認してください。 > もしよろしければ、gnuplotの使い方も教えていただければうれしいのですが… 質問がある場合は http://www.hyuki.com/writing/techask.html を熟読した上でお願いします。ただしこの掲示板ではこれまで gnuplot の話題が 出たことはないので、 Gnuplot Q&A 掲示板 http://ayapin.film.s.dendai.ac.jp/cgi-bin/trees.cgi などで聞いた方がよいかもしれません。適切な答えをもらうにはどこで 質問するのが効果的かを見極めた上でどうぞ。 それはそれとして > Cのプログラムをgnuplotに出力させたいのですが やればできるでしょうけど、gnuplot の使い方としては適切ではないような気がします。 |
|
>>3815 68user >> "ex3-1.c", 3 行目: 警告: 指令中に無効な空白文字があります >ソースを少しずつ削って、この警告が出る場所を特定してください。 includeの文を1行全部削ってみた所、正常に動きました。 しかし、includeの文はプログラムには絶対必要なものと思っていたのですが… include文が無くても動くということはありえるのですか? 下に正常に動いたプログラムを書きます。 ----------------------------------------------------------------------- /* 【例題3.1】 rei3_1 */ main() { int a,b; printf("異なる2つの整数を入力してください--->"); scanf("%d %d",&a,&b); if(a > b) printf("%d --- BIG\n",a); } ------------------------------------------------------------------------ |
|
>>3816 どら > includeの文を1行全部削ってみた所、正常に動きました。 逆です。動くように削っていくのではなく、動かない最小限の部分を 突き止め、その原因を探る方法を教えたつもりです。 つまり #include に原因があることがはっきりしたので、 % grep include ex3-1.c | od -cx として、なぜ警告が出るのかを調べるべきです。 > include文が無くても動くということはありえるのですか? いろいろありますが、初心者のうちは include 文は書くべきと 思っておく方がよいでしょう。 |
|
>>3817 68user この前のプログラムから、#includeと<stdio.h>の間の空白を削除してみましたが、やはり同じ警告が出ました。 それで、そのプログラムにgrepをかけてみました。どこに空白文字があるのかがわかりません… あるとしても最後の“\d\n”ぐらいだと思うのですが、これは指令とは関係ないし、必要なもののはずなのですが… 下に“grep include ex3-1.c | od -cx”の結果を書きますので、終えてください。よろしくお願いします。 -------------------------------------------------------------------------- 0000000 # i n c l u d e < s t d i o . h 2369 6e63 6c75 6465 3c73 7464 696f 2e68 0000020 > \r \n 3e0d 0a00 0000023 ------------------------------------------------------------------------- |
|
>>3818 どら > 0000020 > \r \n 改行コードが CR LF になっています。UNIX の改行コードは LF です。 CR が空白文字扱いされているのでしょう。 とりあえず CR を削るだけなら tr コマンドが使えます。 http://x68000.startshop.co.jp/~68user/unix/pickup?tr Windows で作ったソースを ftp などで UNIX 上に持ってきて いるなら、アスキーモードで転送しましょう。ただし、全て UNIX 上で開発するのがスキルアップへの道だと思います。 |
|
>>3819 68user trコマンドで\r\nを\nに変えてみるとうまく作動しました。 ためしに、ftpでの転送もアスキーモードに変えると うまく作動しました。 原因が改行コードとは…気づきませんでした。 いろいろとありがとうございました。 |
|
初めて掲載しますが....、 ソケット通信で、select()を使用した非同期通信をさせているのですが、 select()で検知した当該FDを(例としてFD=10と設定)recv()したら、 FD=10のrecv()返値が0(CLOSE?)となることがあります。 recv()返値が0の場合は、相手側がCLOSEしたものと認識はできるのですが、 疑問に思う動作でそれは、通常FD=10ならFD=10を介して送受信を行い、 select()監視しさせて、何かイヘ゛ント発生があればrecv()の動作に遷移する 動きを正常にしているのですが、突然的に(不規則と言うか、不確定と言うか) FD=10で送信後そのFD=10で受信するのに、select()からの戻りが数十秒 (ほとんど決まって、24〜25秒経って)経って検知され、recv()したら 返値が0であると言う動作があります。 このような動作になる原因が解らず、何かヒントや調べる手立てとかありませんか???。 (これって、ネットワーク障害/ネットワーク負荷とか、相手側マシンのHW的障害 などの影響も考えられますか....???) ...記述表現が的確でありませんが、ご了承ください。 |
|
いまここのHTTPクライアントを参考にして POSTをCGIへ仲介するCGIを作っているのですがうまくいきません; GETのところを print SOCKET "POST / HTTP/1.0\r\n"; print SOCKET "Content-Length: $size\r\n"; print SOCKET "\r\n"; print SOCKET "$buffer\r\n"; として $buffer = $ENV{ 'QUERY_STRING' }; $size = length $buffer; を追加してみたのですが・・・。お知恵を拝借できませんでしょうか? |
|
>>3821 マツマツ > FD=10で送信後そのFD=10で受信するのに、select()からの戻りが数十秒 > (ほとんど決まって、24〜25秒経って)経って検知され、recv()したら > 返値が0であると言う動作があります。 よく理解できませんが、 1. send し、select で待つ。 2. 相手側はデータを受信後、すぐに close しているはず。 3. ところが select で 24〜25 秒待たされ、その後に読み込み可能になる。 4. recv すると 0 が返ってくる。 ということであれば、 a. ネットワークの質が悪く、TCP の再送タイマが働いている b. 2 で相手が 24〜25 秒かけて何かを処理してから close している くらいしか思いつきませんでした。パケットダンプしてみては。 >>3822 ユウキ そんな複雑なプログラムを書くのはやめて、まずは単純に POST する プログラムを書くべきでしょう。もし、そういうプログラムは既に作成済 ということであれば、うまくいく場合とうまくいかない場合のリクエストを 見比べればわかるでしょう。 あと、質問をする前に http://x68000.startshop.co.jp/~68user/cgi-bin/wwwboard.cgi?howtouse を読んでください>質問者の方々 自分の使っている環境すら書かない人、回答してもわかったのかどうか返事さえ 書かない人が多くて、少々うんざりです。 |
|
申し訳ないです;少し安易に書き込んでしまいました。。。 単純にPOSTしてみます。深夜なのに申しわけなかったッス |
|
●コメント/アドバイスの程ありがとうございます。 (個人的に多忙な面もあり、有意な内容が書かれていることに対して、 返事が遅れた点は、お許しください) 後追いの記載ですいませんが、使用しているマシンはSUNのSC2000 (OS:Solaris2.4)と、SVR4ベースOSを使ったマシン(ここでは相手側) です。(LANのスペックは10BASE) <=両者とも今ではかなり古いものですが...。 またあえて言わしていただきますと、下記の3,4が発生するのは SVR4ベースOSを使ったマシン側です。 > FD=10で送信後そのFD=10で受信するのに、select()からの戻りが数十秒 > (ほとんど決まって、24〜25秒経って)経って検知され、recv()したら > 返値が0であると言う動作があります。 よく理解できませんが、 1. send し、select で待つ。 2. 相手側はデータを受信後、すぐに close しているはず。 3. ところが select で 24〜25 秒待たされ、その後に読み込み可能になる。 4. recv すると 0 が返ってくる。 ということであれば、 a. ネットワークの質が悪く、TCP の再送タイマが働いている b. 2 で相手が 24〜25 秒かけて何かを処理してから close している くらいしか思いつきませんでした。パケットダンプしてみては。 ●まずは、LANアナライザーを噛まして見たいと思います。 ちなみにTCPの再送タイマってものが働いている場合、そのタイマは 24〜25秒の値なのでしょうか。 >>3822 ユウキ そんな複雑なプログラムを書くのはやめて、まずは単純に POST する プログラムを書くべきでしょう。もし、そういうプログラムは既に作成済 ということであれば、うまくいく場合とうまくいかない場合のリクエストを 見比べればわかるでしょう。 ●そうですね。(基本的なことから行うべきですね) |
|
>>3825 マツマツ > ちなみにTCPの再送タイマってものが働いている場合、そのタイマは > 24〜25秒の値なのでしょうか。 「詳解 TCP/IP Vol.1」によれば、RTT (往復時間) がほぼ 0 な LAN 上では、 再送間隔は 1秒・3秒・6秒・12秒・24秒… で、これを最初の送信からの経過時間で表すと 1秒・4秒・10秒・22秒・46秒… だそうです。 ただし RTT にそれなりの時間がかかる場合は、上記の通りには なりません (計算式が難しくてよくわかりませんが)。 なお、上記の事柄が Solaris 2.4 や、同時代の SVR4 にも当て はまるかどうかはわかりません。 |
|
> ちなみにTCPの再送タイマってものが働いている場合、そのタイマは > 24〜25秒の値なのでしょうか。 「詳解 TCP/IP Vol.1」によれば、RTT (往復時間) がほぼ 0 な LAN 上では、 再送間隔は 1秒・3秒・6秒・12秒・24秒… で、これを最初の送信からの経過時間で表すと 1秒・4秒・10秒・22秒・46秒… だそうです。 ●ありがとうございます。 (TCP/IPプロトコルについて、技術的な専門知識が分っていないため、 今後は勉強したいと思います。) で、少々また不仕付けなお話ですみませんが、再送タイマが発生していると した場合に、その原因/要因には、何があるでしょうか。 ”ネットワークの質が悪く、TCP の再送タイマが働いている” の部分で気になり、どちらかのマシンのHW不調(LAN・I/Fカードや CPUボード等)とか、LANケーブル、HUB、トランシーバなどの 不調の影響で発生することとか考えられるでしょうか?。 (パケットトレースで確認することは必要なのですが、発生していると 分った時の発生原因を特定する上で、まず想定できる可能性のものがあれば と思った次第からです) (HW回りを疑って見るべきかどうか、何とも言えないのですが...) ただし RTT にそれなりの時間がかかる場合は、上記の通りには なりません (計算式が難しくてよくわかりませんが)。 なお、上記の事柄が Solaris 2.4 や、同時代の SVR4 にも当て はまるかどうかはわかりません。 |
|
>>3827 マツマツ パケットを送信した後、一定時間が経過しても ACK が返ってこなければ 再送するわけなので、 > どちらかのマシンのHW不調(LAN・I/FカードやCPUボード等)とか、 > LANケーブル、HUB、トランシーバなどの不調の影響で発生することとか > 考えられるでしょうか?。 これらすべてがパケット再送の原因となりえます。 |
|
この土日で当ページの引越しを予定しています。しばらく繋がらなかったり するかもしれませんが、あらかじめご了承ください。 |
|
というわけで引っ越しました。 現時点でわかっている問題点は、 - 掲示板の全文検索が動かない (準備中) - SEGA BBS 過去ログの全文検索が動かない (準備中) です。この他に変なところがあればご指摘いただけると幸いです。 |
|
>>3830 68user > - 掲示板の全文検索が動かない (準備中) 一応検索できるようになりました。 |
|
日記。 FreeBSD 5.2.1-RELEASE の /usr/bin/sort は NetBSD の sort から GNU の textutils の sort に変わってしまったらしい。sort -c で件数を数えることができなくなってしまった。ショック。 |
|
>>3832 68user > sort -c で件数を数えることができなくなってしまった。 間抜けな勘違いをしていました。uniq -c と混同してただけでした。 sort も uniq もこれまで通り普通に使えますね。 |
|
最近になってTCP/IPの勉強を始めましたが、 データリンク層 トランスポート層 ネットワーク層 の役割に反する実装の実例を挙げろって言われても…… 何の事だかさっぱりです。 誰かわかるひといませんか? |
|
>>3834 マオ猫 > …の役割 は何なのかをまず考えてみるべきでしょう。 ところで素朴な疑問ですが、これってどんな本 or 人 or 試験 からの出題ですか? |
|
いつも参考にさせてもらってます。 この度、仕事でSSL/TSLに対応したバッチ用のFTPクライアントが必要になったのですが、 Perlで実現できますでしょうか? いろいろ検索してみたのですが、これといったのが見つからなくて・・・ もし何か知っていましたら、ご教授お願いします。 |
|
ちなみに使用するサーバはRedHat Linux9.0です。 |
|
>>3836 う > この度、仕事でSSL/TSLに対応したバッチ用のFTPクライアントが必要になったのですが、 > Perlで実現できますでしょうか? Perl で「簡単に」行うモジュールはまだないと思います。Perl にこだわるなら http://perldoc.jp/docs/modules/IO-Socket-SSL-0.91/SSL.pod などを使ってがんばるしかないでしょう。 あるいは http://www.perldiscuss.com/thread.php?group=perl.libnet の 「Net::FTP versus TLS」のスレッドの人たちに「サンプルくれ!」とお願いする 手もあるかも (もらえたらわたしにもください)。 上記のスレッドでも出ていますが、手抜きするなら lftp (http://lftp.yar.ru/) が SSL/TLS に対応しているようなので、これを system なりで呼び出すのが楽だと思われます。 |
|
FreeBSD 5.2.1-RELEASE に TLS な proftpd をインストールし、lftpd で 接続してみるメモ。OpenSSL は標準でインスールされているが、なぜか proftpd を make -DWITH_OPENSSL install すると ports の OpenSSL が要求 されるので、まずそれを入れる。 # cd /usr/ports/security/openssl && make install # cp /usr/local/openssl/openssl.cnf.sample /usr/local/openssl/openssl.cnf # mkdir /usr/local/openssl/proftpd 鍵作成 (パスフレーズなし)。CSR を作成し、自己認証。 # cd /usr/local/openssl/proftpd # openssl genrsa > key.pem # openssl req -new -days 365 -key key.pem -out csr.pem # openssl x509 -in csr.pem -out cert.pem -req -signkey key.pem -days 365 ProFTPD のインストール。 # cd /usr/ports/ftp/proftpd # make -DWITH_OPENSSL install # mkdir /var/run/proftpd # cat <<END >> /usr/local/etc/proftpd.conf <IfModule mod_tls.c> TLSEngine on TLSLog /var/log/proftpd-tls.log TLSProtocol TLSv1 TLSRequired off TLSRSACertificateFile /usr/local/openssl/proftpd/cert.pem TLSRSACertificateKeyFile /usr/local/openssl/proftpd/key.pem TLSVerifyClient off </IfModule> ProFTPD 起動。rc まわりが rcNG になったので、proftpd_enable が必要 (?) # echo 'proftpd_enable="YES"' >> /etc/rc.conf # /usr/local/etc/rc.d/proftpd.sh start lftpd で接続テスト。 # cd /usr/ports/ftp/lftpd && make install % lftp -d hoge@localhost Password: *** lftp hoge@localhost:~> ls ---- Connecting to localhost () port 21 <--- 220 ProFTPD 1.2.10rc1 Server (ProFTPD Default Installation) [hostname] ---> AUTH TLS <--- 234 AUTH TLS successful Certificate depth: 0; subject: /C=JP/ST=XX/O=Internet Widgits Pty Ltd; issuer: /C=JP/ST=XX/O=Internet Widgits Pty Ltd WARNING: Certificate verification: self signed certificate ---> USER hoge <--- 331 Password required for hoge. ---> PASS XXXX <--- 230 User hoge logged in. ---> PWD <--- 257 "/usr/home/hoge" is current directory. ---> PBSZ 0 <--- 200 PBSZ 0 successful ---> PRET LIST <--- 500 PRET not understood ---> PASV <--- 227 Entering Passive Mode (127,0,0,1,192,51). ---- Connecting data socket to () port 49203 ---> LIST <--- 150 Opening ASCII mode data connection for file list ---- Closing data socket <--- 226 Transfer complete. (略) lftp hoge@localhost:~> |
|
どうでもいいんですが、ここ数年モチベーションが低下して、web の 更新が非常に少なくなっていました。 そこで数日前からトップページなどにバナー広告を付けてみました。 バナー広告を貼る → 収入がっぽり → 更新する気力がわく ということを夢見ていましたが、3日での収入はなんとびっくり 15円でした。 つまり 1日 5円。月に150円。年に 1800円。 5,000円以上にならないとお金が振り込まれないので、あと 2年半くらい 経ったらわたしは 5,000円手にすることになります。いやーここまで 儲からないものとは。 しかしわたしは変なところで前向きなので、今の 100倍の人が見にきて くれれば毎日 500円、月に 15,000円も儲かるかと思うと、モチベーション あがりっぱなしです。というわけで、訪問者を 100倍にする第一歩として、 web と CGI のひみつ (http://X68000.q-e-d.net/~68user/webcgi/) の 全文検索 (http://X68000.q-e-d.net/~68user/webcgi/search-1.html) を全面的にリライトしました。 |
|
サイト更新ありがとうございます。参考にしてます。 全文検索できないのですが。(実行に必要な権限がない。とのこと) テスト中でしたらすみません。 |
|
>>3841 naisttn > 全文検索できないのですが。(実行に必要な権限がない。とのこと) 掲示板の全文検索ですね? namazu.cgi の存在をすっかり忘れてしまい、cgi-bin/wwwboard/ 以下を 閲覧不可に設定してしまいました。本日中に直します。 |
|
>>3841 naisttn 直しました。ご指摘ありがとうございました。 結局 .htaccess を # namazu.cgi 以外はアクセス拒否 SetEnvIf Request_URI "namazu.cgi" IS_NAMAZU order deny,allow allow from env=IS_NAMAZU deny from all としたのですが、他にわかりやすい書き方ないですかねぇ? <Files !~ "namazu.cgi"> deny from all </Files> とか <Files "namazu.cgi"> <Else> deny from all </Else> </Files> とか <FilesMatch "(?:(?!namazu.cgi).)*"> deny from all </FilesMatch> とか書けないもんでしょうか。 てゆーか、apache の書式は絶対に腐ってると思う。 |
|
UNIX の部屋 http://x68000.q-e-d.net/~68user/unix/ を更新しましたが、たいしたことは書いていません。 |
|
OpenSSLを使ってC言語でHttpClientを実装する方法を参考にさせて頂きました。 ですがサンプル通りでは、SSL_connect()で-1が返ってきます。 ずっと調べてまして、乱数を作成する時の種を設定しないと行けないみたいです。 それもある程度の長さの種じゃないと駄目なようです。(私の環境では32以上) 今、自宅なのでOpenSSLのバージョンはどれなのか判りませんが、 SSL_connect()するまでに以下の関数のどれかを使うと良い様です。 1、RAND_load_file() 2、RAND_seed() 3、RAND_poll() 一番楽なのは3を使うのが楽ですし、一般的で確実かもしれません。 ちなみにマスタリングTCP/IP SSL/TSL編のサンプルでは1が使われてました。 できれば、「SSL/TLS でアクセスしてみよう」に追記して頂ければ、 今後同じ所で嵌る人が困らないと思います。 お忙しいと思いますが、宜しくご検討下さい。 |
|
>>3845 ニッタン 質問ですが、 http://search.luky.org/obu/msg02180.html http://search.luky.org/obu/msg02181.html と同じく、/dev/random が存在しない環境でしたか? |
|
UNIX の部屋 http://x68000.q-e-d.net/~68user/unix/ を更新しましたが、苦労したわりに内容はいまいちです (m4 とか)。 あと、見栄えをいじりましたが、もし見づらかったら文句言ってください。 |
|
ネームサーバはプライマリとセカンダリを置いて、プライマリが障害の場合セカンダリが応答しますよね。 この仕組みはどのように実現されているのでしょうか? 仮にプライマリがダウンした直後に、プライマリに問い合わせたクライアントがあったとすると、 応答待ちでしばらくするとエラーになりますよね?(自身なし) しかし、しばらくすると、すべてのクライアントが障害のないセカンダリにのみ問い合わせるようになりますよね?(自身なし) この間はどのくらいの時間なのでしょうか? どこかで調整できるのでしょうか? |
|
68userさん、お返事ありがとうございます。 実は、今日会社を休んだ為、OpenSSLのバージョンはまだ判っていませんが、 /dev/randomの件は、マスタリングTCP/IP SSL/TSL編には 少し紹介されてました。 結論から言いますと、多分/dev/randomは存在しない環境かと。 サンプルのソースだとOpenSSLのライブラリー部分で、 /dev/randomに標準でアクセスしに行く様になっているでしたら 現状のサンプルのままでも問題ないかと思います。 (でも一文位あったら親切だな〜っと思ったりもします。お忙しいと思いますが) プロキシー接続だったので、過去ログではプロキシーでしか検索していませんでした。 結局、プロキシー云々は関係なかったですが。 |
|
>>3848 bindユーザ > プライマリが障害の場合セカンダリが応答しますよね。 これは誤りで、セカンダリは常にリクエスト・レスポンスの送受信を しています。 > 仮にプライマリがダウンした直後に、プライマリに > 問い合わせたクライアントがあったとすると、 タイムアウトすると即座にセカンダリにリクエストを投げると思います。 > すべてのクライアントが障害のないセカンダリにのみ > 問い合わせるようになりますよね? ならないです。プライマリにもアクセスし続けます。 以上はキャッシュサーバについての説明です。 通常のマシンはキャッシュサーバにアクセスするだけで、コンテンツ サーバ (プライマリ DNS サーバやセカンダリ DNS サーバ) に直接 アクセスすることはない、ということに注意してください。 とか言いつつ、わたしは DNS サーバの運営をしたことがないので、 嘘をついているかもしれません。 http://dns.qmail.jp/server/ をご一読ください。 >>3849 ニッタン ソースが不十分であることは認識していますので、直します。 # ついでにエラーメッセージの出力が不十分なので、これも # 直します。 ただ、なぜ RAND_load_file()/RAND_seed()/RAND_poll() しなければ ならないのかを正確に書きたかったので、質問させていただきました。 今気づきましたが、FAQ にも書いてありますね。 http://www.openssl.org/support/faq.html#USER1 1週間ほど時間をください。 |
|
>>3847 68user チェックボタンをonにする、ラベル用途のJavaScriptでエラーが出ます。 数年前からだと思うのですが… 私は、Windows2K & ie6ユーザーです。 |
|
>>3851 hash ありがとうございます。丸一年気づいていませんでした。 さきほど修正しました。 どうでもいいんですが、こういう用途に使える label 要素 ってのがあることをつい先日知りました。 http://tohoho.wakusei.ne.jp/html/label.htm |
|
この掲示板の全文検索 (namazu.cgi) ですが、問題が発生したため 再び休止します。 |
|
お聞きしたいのですが、 Linuxでのbashシェルを使った 環境変数PATHの順番を変更するやり方を教えてください。 |
|
>>3854 tototo お望みの PATH をそのまま設定する方が自然だと思われます。 どうしても「順番の変更」でなくてはならない理由はありますか? |
|
68userさん、 お忙しいとは思いますが、よろしくお願い致します。 とっても有益な情報が沢山載っているので、 今後も役立つと思いますので、頑張ってください。 私の方でももう一度、調べてみましたが RAND_poll()が、自動的に呼ばれる様になっていますね。 (FAQにもそれらしい事が書いてあるような気もしますね。) 私の使っている環境に移植してきた担当者が RAND_poll()を空関数に実装し直していました。 出来れば、ERR_print_errors_fp()の存在も追記して頂けると重宝すると思います。 |
|
はじめまして。大学生をやっていますつばきです。 Unixのコマンドの意味でわからないことがありました。 学校の課題で「ftp」と「rcp」の違いを説明せよ、というものがありまして、 こちらのサイトでコマンドを検索してみたのですが、 「ftp」はファイルを置いてくる/持ってくる、「rcp」はファイルをコピーする、という説明が出てきました。 この二つ、特に持ってくるとコピーするの部分は同じ意味のような気がするのですが 具体的な違いは何なのでしょうか。 できれば、でよろしいのでご回答お願いします。 |
|
>>3856 ニッタン > 出来れば、ERR_print_errors_fp()の存在も追記して頂けると重宝すると思います。 了解です。 >>3857 つばき > この二つ、特に持ってくるとコピーするの部分は同じ意味のような気がするのですが 同じです。 - ftp なら get するか、put するか - rcp なら rcp ./file host: するか rcp host:file . するか の違いです。 わたしの思う大きな違いは Anounymous ftp という仕組みでファイルを 配布できるのが ftp、そうでないのが rcp。 後は些細な違いしかないと思いますが、それでも 10 や 20 はあげられる かと思います。課題ということなのでいろいろ調べてみてください。 |
|
はじめまして、ネットワークプログラミングの勉強をしています。 Windows上でネットワーク関連のソフトウェアを作成したことはあるのですが、 ライブラリを使用していた為、SocketAPI等はあまり深い知識がありません。 そこで教えていただきたい事があるのですが、ここの掲示板でよろしいでしょうか? 1.WindowsのSocketとUNIXのSocketで関数の違い等あるのでしょうか? 2.UNIXのSocketでも、Linux、FreeBSD、Solaris等で違いがあるのでしょうか? 参考情報等教えていただきたいと思ってます。宜しくお願い致します。 |
|
順番変更しなければならない理由はないのですが、 PATHの順番を変更するやり方 はあるのかが気になったのため、お聞きしました。 |
|
>>3859 samsara > 1.WindowsのSocketとUNIXのSocketで関数の違い等あるのでしょうか? http://www.kt.rim.or.jp/~ksk/wskfaq-ja/articles/bsd-compatibility.html など。 > 2.UNIXのSocketでも、Linux、FreeBSD、Solaris等で違いがあるのでしょうか? たとえば http://x68000.q-e-d.net/~68user/net/echo-3.html#6 の backlog とか、UDP で受信できる最大サイズを超えた場合の 処理などですかね。より詳しいことを知りたいなら http://x68000.q-e-d.net/~68user/net/link-book.html 「UNIX ネットワークプログラミング第2版 Vol.1」 をどうぞ。後は http://apr.apache.org/ などのライブラリのソースの #if 部分をとことん読む、などなど。 >>3860 tototo > PATHの順番を変更するやり方 PATH=`echo $PATH | sed 's@/usr/bin:@@'`':/usr/bin' とか for i in `echo $PATH | tr ':' ' '`; do いろいろ done とかですかねぇ。 |
|
ここ数ヶ月 (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で 複数指定はできないのでしょうか(リストというからには複数できるような...)。 |