|
あけましておめでとうございます。 朝早くから失礼いたします。 このページは、EmacsLipsでネットワークプログラミングについて ぐぐっていたら、たどり着きました。 早速一つ質問させてください。 telnetでウェブサーバからファイルを取ってこようとしたところ、 GET /hoge.rdf HTTP/1.0 で、404になってしまいます。ブラウザやwgetだと取ってこれます。 こういう場合は、どのようにすればいいのでしょうか? # あと、私事で恐縮なのですが、SEGA BBSのログを発見したので、 # ためしに名前を入れてみたらおもいっきりヒットしました。(^_^;) # いやー懐かしい。とにかく懐かしいです。(;_;)ホロホロ # ちなみに、SEGA BBSのトップにあるsagabitoへのリンクって #「くにおにく」さんのページですよね? # 当時、「くにおにく」さんに大変世話になった記憶があります。 # 無事で過ごされているようでしたらなによりです。 # 以上、私事で失礼しました。 |
|
>>3501 けんおお すみません。自己解決しました。 GET /hoge.rdf HTTP/1.1 Host:hoge.jp Connection:close でいけました。 最近は、HTTP/1.0ではファイルを取ってこれなくなったんでしょうか? それでは、失礼します。 |
|
はじめまして。 検索辿ってこちらを拝見させていただきました。 早速質問させていただきたいのですが、 SunのUltra10 SPARKマシンで、SunOSのデスクトップに ファイルを配置するためにデスクトップの絶対パスを調べたいのですが、 Windowsのデスクトップのようにショートカットの絶対パスを辿ろうと しても一向に見つかりません。 もしかしてSunOSのデスクトップ(ワークステーション?)上のショートカットは実体のない参照(リンク)でしかなくて、デスクトップの絶対パスなんてものは存在しない(ファイルを置くことはできない)のでしょうか。 よろしくご教示お願いします。 |
|
>>3498 ポッしブル > チャットにおいて選んだユーザーにだけメッセージを送るというのは > 一体どうすれば可能なのですか? 名前と IP アドレスの一覧のテーブルを内部に持っておいて、選択 された名前から対応する IP アドレスを得て、その IP アドレス宛に メッセージを送信すれば可能でしょう。 要は、そういう動作をするように、あなたがプログラムを組まなく てはならないということです。 >>3501 けんおお >>3502 けんおお GET /hoge.rdf HTTP/1.0 が 404 not found なのは、 バーチャルホストな web サーバだったからでしょう。 http://x68000.startshop.co.jp/~68user/net/http-4.html さらなる改善点・バーチャルホストに対応 を読んでください。 HTTP/1.1 で OK だったのは、HTTP/1.1 だと Host ヘッダが 必須なため、結果的にバーチャルホストに対してホスト名を 提示することができたからだと思われます。 > # ちなみに、SEGA BBSのトップにあるsagabitoへのリンクって > #「くにおにく」さんのページですよね? そうです。でも今は公開されていないようですね。1年ほど前に BBS があることは確認しましたが、今は見つけられません。 >>3503 ShinoP CDE ですか? CDE をまともに使ったことはありませんが、 Solaris2.6+CDE 環境で試してみると、 ~/.dt/Desktop/.!dtdesktop ~/.dt/sessions/current/.!dtdesktop などのファイルに、リンク先のフルパスが保存されているような 気がします。 |
|
>>3504 68user いえ、リンク先のフルパスが知りたいのではなく、目的は 「デスクトップ」自体の絶対パスを知りたい、ということです。 少々説明が足りませんでした。 その手段としてWindowsと同じ感覚でショートカットのリンク先ではなく ショートカット自身の絶対パス (Windows2000ならば "C:\Documents and Settings\administrator\デスクトップ" で表されるような) を調べようとしたのですが、 どうにも見つかりません。 これは現在疑ってる通り、ショートカット自体には実体がなく、 したがってデスクトップに実体ファイルを配置する、 ということは不可能だということなのでしょうか。 |
|
>>3505 ShinoP そういうことであれば > ショートカット自体には実体がなく、したがってデスクトップに > 実体ファイルを配置する、ということは不可能 だと思います。 ただしわたしは CDE は常用しておらず、今回初めて CDE のヘルプを 見たくらいなので、間違っている可能性は多分にあります。 |
|
>>3506 68user CDEのデスクトップショートカットはシンボリックリンクみたいなもの、 ということのようですね。 断念して代替パスを設定する方向で進めようと思います。 ありがとうございました。 |
|
>>3500 zsh >取得したいのがEOFだとすると >getlineの戻り値見るくらいしか思いつきません。 >普通にENDに記述じゃダメですか? >或いは行数+フィールド番号でファイルの最後をチェックするとか getlineの戻り値ですか。 ファイルの総行数を取得して、読み込んだ行数と比較するかと思う のですが。 >或いは行数+フィールド番号でファイルの最後をチェックするとか ちなみにどうするのですか。 >普通にENDに記述じゃダメですか。 とはどういう意味ですか。 ファイルの最後にENDを付けた様式ということですか。 それでしたら無理です。 |
|
>>3508 ブラウン >> 普通にENDに記述じゃダメですか。 > とはどういう意味ですか。 { 行ごとの処理 } END { 終了時の処理 } という書き方ではどうか、ということでしょう。これは awk の設計思想に沿った最も自然な書き方だと思います。 それがダメなのなら、わたしも getline の戻り値を 取るのがよいと思います。 |
|
>>3509 68user フォローありがとうございます。 >>3508 ブラウン >ファイルの総行数を取得して、読み込んだ行数と比較するかと思う >のですが。 それは以前提示したスクリプトの方法ですが、 それだと最終行かどうかの判断であり、EOFかどうかの判断ではありません。 >>或いは行数+フィールド番号でファイルの最後をチェックするとか >ちなみにどうするのですか。 あまり意味のない方法ですので、気にしない方が良いと思います。 |
|
シェルについて2点教えて下さい。 1.フィールドの区切がカンマ「,」となっている行から 例えば、 山田 太郎,ヤマタ゛ タロウ,Yamda Taro,18,1760/12/24 山田 花子,ヤマタ゛ ハナコ,Yamda HANAKO,18,1760/12/24 から、 先頭のフィールドかあとか、 フィールドの3,4,5を取り出したいのです が、awkを使う以外にないのでしょうか。 2.シェルで、今日から10日前の日付を取得することはできるのでしょうか 環境は、HP-UX11.00、Bシェルです。 |
|
>>3511 ブラウン シェルについて2点教えて下さい。 1.フィールドの区切がカンマ「,」となっている行から 例えば、 山田 太郎,ヤマタ゛ タロウ,Yamda Taro,18,1760/12/24 山田 花子,ヤマタ゛ ハナコ,Yamda HANAKO,18,1760/12/24 から、 先頭のフィールドから順にとか、フィールドの3,4,5を取り出したい のですが、awkを使う以外にないのでしょうか。 awkを使わないで出来る方法と、awkを使ってできる方法を教えて 下さい。 2.シェルで、今日から10日前の日付や、指定した日付の10日前を 取得することはできるのでしょうか 環境は、HP-UX11.00、Bシェルです。 |
|
>>3511 ブラウン 質問したら必ず結果を書いてください。 http://x68000.startshop.co.jp/~68user/cgi-bin/wwwboard.cgi?howtouse |
|
賢いやり方か、上手いやり方か分からないが こうすればできる。 -------------------------------------------- #!/bin/sh back_to_day() { case $MM in 0) MM=12 MAX=31 ;; 1|3|5|7|8|10) MAX=31 ;; 4|6|9|11) MAX=30 ;; 2) if [ `expr $YYYY % 4` -eq 0 ]; then MAX=29 else MAX=28 fi ;; esac } YYYY=`echo $1 | cut -c1-4` MM=`echo $1 | cut -c5-6` DD=`echo $1 | cut -c7-` DD=$((DD-7)) if [ ${DD} -le 0 ] ; then MM=$((MM-1)) if [ ${MM} -eq 0 ] ; then YYYY=$((YYYY-1)) back_to_day DD=$((DD*-1)) DD=$((MAX-DD)) fi fi printf "%d%02d%02d\n" $YYYY $MM $DD exit 0 |
|
>>3512 ブラウン 区切り文字がカンマで、awkを使用しない場合。 ------ $ cat data.txt 山田 太郎,ヤマタ゛ タロウ,Yamda Taro,18,1760/12/24 山田 花子,ヤマタ゛ ハナコ,Yamda HANAKO,18,1760/12/24 $ cat sam1.sh #!/bin/sh OIFS="$IFS" i=0 while read line ; do IFS="," i=`expr $i + 1` set -- $line j=0 while [ $# -gt 0 ] ; do j=`expr $j + 1` echo "$i - $j : $1" shift done IFS="$OIFS" done < data.txt $ sh sam1.sh 1 - 1 : 山田 太郎 1 - 2 : ヤマタ゛ タロウ 1 - 3 : Yamda Taro 1 - 4 : 18 1 - 5 : 1760/12/24 2 - 1 : 山田 花子 2 - 2 : ヤマタ゛ ハナコ 2 - 3 : Yamda HANAKO 2 - 4 : 18 2 - 5 : 1760/12/24 ------ 指定された日付の10日前の日付を取得するのは面倒そうなのでパス。 単純に今日から10日前を取得する方法については、 下(↓)を良く読みましょう。 http://x68000.startshop.co.jp/~68user/unix/prgmemo.html#date |
|
>>3515 zsh ありがとうございます。 行の編集についてはできました。 しかし、日付の操作については、 http://x68000.startshop.co.jp/~68user/unix/prgmemo.html#date を参考にしてやって見ました。 タイムゾーンを設定して、URLの例にあるのでは、上手くいったのですが % env TZ=JST+15 date (1日前の時刻を表示) % env TZ=JST-33 date (1日後の時刻を表示) 2日前では、 -9+48=39 % env TZ=JST+39 date は上手く行きませんでした。 環境は、HP-UX11.00、Bシェルです。 |
|
初めて投稿いたします。 UNIXのコマンドで、split というファイル分割コマンドがありますが、分割後のファイルをWindowsで結合させるための、MS-DOS コマンド、あるいは、フリーのソフトを知らないでしょうか。 |
|
>>3517 せんべい > 分割後のファイルをWindowsで結合させるための、MS-DOS コマンド copy a.txt+b.txt+c.txt out.txt でできたような気がします。 > あるいは、フリーのソフトを知らないでしょうか。 http://www.so-net.ne.jp/download/win/util/file/spl_mrg/ など。 |
|
はじめまして,unix初心者です,教えて下さい。 異常終了させてしまい,1つのハードがmountされません。fsckを使って修復しようとしたのですが,エラーメッセージによると部分的なセクターが破損しているため修復できないとの内容でした。破損している箇所だけのフォーマットは可能なのでしょうか?もしあれば方法を教えて下さい。お願い致します。 |
|
>>3519 初心者 詳しくないのでなんともいえませんが (これまで fsck でこけた 経験がないので)、少なくとも以下の情報は必要でしょう。 - OS 名とバージョン - ファイルシステム名 (ufs, ext2 など) - 正確なエラーメッセージ (エラーメッセージで検索できるよう原文を提示する) 検索のキーワードとしては「スーパーブロック」ですかねぇ。 |
|
unixのfindコマンドについて教えて下さい。 findを使用するとファイルの検索ができますが、 自分がいるカレントのみを検索し、その配下にあるディレクトリ を検索したくないのですが、どうすれば可能でしょうか。 例えば、 現在位置 cd /tmp/tool/bin /tmp/tool/bin 入るとします。 find .. -name ".log" -type f -print と行うと、tool及び、bin配下やよのたのディレクトリを検索 find .. ! -depth -name "*.log" -print と行うと検索しない。 1つもだった、ところのファイルのみを検索したい |
|
>>3521 yabu -maxdepth 1 でいけるでしょうが、-maxdepth に対応 していない find もあります。 単にファイル名でマッチさせたいだけあれば、 % echo *.log でもいいでしょう。 |
|
Sunでaliasの設定でつまづいてます。。(alias rm="rm -i") シェルはshなので.profileに記述しましたが効きません。 ネット検索しましたがshでのalias設定なしとありました。 shでのalias設定はどう行えばいいでしょうか? ご教授お願いします |
|
>>3522 68user >-maxdepth 1 でいけるでしょうが、-maxdepth に対応 >していない find もあります。 HP-UX、SunOSともに対応していませんでした。 >単にファイル名でマッチさせたいだけあれば、 > % echo *.log >でもいいでしょう。 でやらせていただきました。 |
|
IE などブラウザ上のボタンなどの操作を外部からしたいのですがしたいのですが、可能でしょうか? 例、VC++ のソフトで、Yahoo の検索を検索キーワードを入力や検索ボタンを押したい。 例、証券会社のHPで定期的に株価更新のため株価ボタンを押す。 などです。 ここの主旨から外れるかも知れませんが、宜しくお願いします。 |
|
>>3523 moko まずは $ . $HOME/.profile としましょう。それで alias が効かないなら .profile の書き方が悪い。alias が効くなら .profile が読み込まれ ていないか、.profile 読み込み後に unalias されている んでしょう。 >>3525 external 詳しいところは知らないので、キーワードだけ並べておきます。 COM (Component Object Model) OLE (Object Linking and Embedding) ActiveX |
|
初歩的な質問ですが、Solarisのhostsについて教えて下さい。 他の端末と通信する為には/etc/inet/hostsにIPを書くと思っています。 でも、/etc/hostsにも同じhostsがあり、両方直しています。 /etc/hostsには/etc/inet/hostsと違った意味があるのでしょうか。 宜しくお願いします。 |
|
>>3527 yuki http://www.freebsd.org/cgi/man.cgi?query=hosts&manpath=SunOS+5.9 NOTES /etc/inet/hosts is the official SVR4 name of the hosts file. The symbolic link /etc/hosts exists for BSD compatibility. というわけで、同じでしょう。 |
|
Volumeの初期化に関して,どうのような操作をすれば良いか教えてください。digital unix 4.0 |
|
crontabを実行した時間がわかるようにするためにはどのような書き方をしたらよいかわかりません。教えていただけないでしょうか。 よろしくお願いいたします。 |
|
こんばんは。 Perlのほうが文字列処理などが書きやすい、でもCのほうが速度が速かったりするなどの理由から、XSを使用して二つの言語を合わせてみようと思いました。 そこで、CのヘッダをXSにかけてからPerlを実行したのですが、 "Your vendor has not defined Prime macro Prime" というエラーが出てしまいます。 XSによって生成されたのはPrimeというディレクトリで、その中にあるPrime.pmに、Perlから第一引数として数字を渡すものでした。 Perlのほうからは、 Prime::Prime($ARGV[0]) として呼び出しましたが、何がいけなかったのか、教えていただきたく思います。 よろしくお願いします。 |
|
AIXに付いて教えて! AIXマシンでは、gettimeofday()関数が使えない! よくよく調べると、コンパイル時、XOPEN_SOURCEを指定している為 である事が判ったが、XOPEN_SOURCEを外す訳にもいかず困ってます。 gettimeofday()関数と同じ機能で、置き換えられる関数ってないでしょうか? |
|
>>3529 kai Volume ってなんですか? 音量のことですか? であれば わかりません (ioctl とか使うんですかね)。 >>3530 momo 1. cron から実行するスクリプト内でファイルに時刻を記録する 2. * * * * * date>>/foo/bar/log; command とする。 3. /var/cron/logs などにあるログを見る。 >>3531 ken XS はよく知りませんが、perl のバージョンも、何をどうやったの かも書かれていないので何ともいえません。 下記は perl 5.005_03 の例ですが、まずはここからでしょう。 % h2xs -A -n Prime % cd Prime int Prime(num) int num; CODE: RETVAL = 2*num; OUTPUT: RETVAL % perl Makefile.pl % make hoge.pl を作成 % cat hoge.pl use ExtUtils::testlib; use Prime; print Prime::Prime(123),"\n"; % perl hoge.pl 246 >>3532 Hiro なぜ XOPEN_SOURCE が指定されていると gettimeofday が使えない のかよくわかりませんが、古い形のプロトタイプ宣言が〜とかいう 話ではないかと思うので、mygettimeofday.c を作って、 #include <sys/time.h> int gettimeofday (struct timeval *, void *) #undef XOPEN_SOURCE int mygettimeofday (struct timeval *Tp, void *Tzp){ return gettimeofday(Tp, Tzp); } とするとか。 |
|
>>3533 68user > int gettimeofday (struct timeval *, void *) #undef XOPEN_SOURCE int gettimeofday (struct timeval *, void *); #undef XOPEN_SOURCE のタイプミスです。 |
|
さきほどXSのことを質問させていただいたのですが、なんとか解決しました(汗 どうやら、根本的に思い違いをしていたのが原因のようで...。 わざわざのご回答、ありがとうございます。 もう少しぼくが早く解決して書き込んでいれば良かったのですけどね。 |
|
>>3528 68user The symbolic linkでしたか。 ぜんぜん気がつきませんでした。有難うございました。 |
|
はじめまして。タカと申します。 Perl関連について御教授ください。 Windows端末にてActivePerl-5.8.2.808-MSWin32-x86をインストールし Perlを作成しております。 そこで、PerlでExcelファイルに出力するプログラムを 作ろうと思っております。 その為、Spreadsheet-WriteExcel-0.42モジュールを、 ダウンロードしました。 本モジュールはWindowsでも機能すると表示されているのですが、 どうやって使用すればいいのか分かりません。 Spreadsheet::WriteExcel version 0.33(日本語訳)の HPを見ているのですが、私の知識不足で不明です。 もしご存知であれば御教授いただきたいのですが、 よろしくお願いいたします。 |
|
>>3537 タカ http://member.nifty.ne.jp/hippo2000/perltips/module_install.htm によると、ActivePerl の場合は PPM なるものを使うそうです。 # わたしは使ったことはありません。 |
|
ありがとうございました。 ちょっと試してみます。 |
|
クッキーに関する↓の冒頭でRFCに盛り込まれていないとありますが、 どうも2109で触れているそうですよ。 http://x68000.startshop.co.jp/~68user/webcgi/cookie.html 参考にさせていただいたサイト: http://www.nonki.net/technical/report/http-cookie/ http://www.ietf.org/rfc/rfc2109.txt |
|
>>3540 has ありがとうございます。とりあえずそこだけ直しておきます。 > どうも2109で触れているそうですよ。 RFC 2109 は obsolete で、今は RFC 2965 です。 http://www.studyinghttp.net/rfc_ja/rfc2965_ja.html でもまぁ、Set-Cookie2 は全然流行っていませんけどね。 |
|
はじめまして 右院堂 と申します。 いきなり質問で エゴ丸出しで申し訳ないですが ASP には Response.Buffer = True というのがあって、 ある html の form から 呼ばれた asp が 呼び元へ 自分の form を Response.Redirect で 返す時、Response.Redirect が実行されるまで HTMLヘッダーの出力を引き伸ばすことが出来ます。 これをやらないと HTMLヘッダーが 自分自身として Redirectされる前に出力されてしまうからです。 Perl では これに相当する記述はあるんでしょうか。 |
|
>>3542 右院堂 ASP はよく知りませんが、素の perl を使う場合は (そういう機能を 持つモジュールを使わない限りは) 相当する機能はないです (そういう 機能を持つモジュールの存在は知りません)。 $buf .= "出力文字列1"; $buf .= "出力文字列2"; ... print $buf; や、 open(STDOUT, "> /foo/bar/tmp.$$"); print "出力文字列1"; print "出力文字列2"; ... close(STDOUT); open(IN, "/foo/bar/tmp.$$"); print <IN>; close(IN); などと自分でバッファに保存し、最終的に出力するのが よいと思われます。 |
|
ポートに関しては初心者です。 すいませんが、ポート番号について教えて下さい。 Solarisを使用していますが、ポート番号は任意の決め事ですか? 現在使用しているSolarisは下記設定になっているようです。 WEBサーバはポート=80、FTP=20、プリントサーバ=9100 これらは、標準で決まっているのでしょうか? また、相手側を意識せず勝手にきめてもよいのでしょうか? 他に、ポートの設定をみる方法とかありましたらご教授下さい。 宜しくお願いします。 |
|
>>3544 yuki > Solarisを使用していますが、ポート番号は任意の決め事ですか? おおまかな指針はありますが、任意です。 > WEBサーバはポート=80、FTP=20、プリントサーバ=9100 デフォルトではそのような設定になっていますが、ほとんどの 場合は (サーバソフトウェアが対応していれば) ポートは変更 できるでしょう。ポート変更方法は各サーバソフトウェアの マニュアルに書いてあるはずです。 > また、相手側を意識せず勝手にきめてもよいのでしょうか? 標準的でないポートを使用するよう設定変更してもいいですが、 利用者に通知しないと使うことができません。 例えば web サーバであれば http://www.example.co.jp/ ではなく http://www.example.co.jp:8080/ にアクセスするようアナウンスしないといけませんし、プリンタで あれば自組織の環境設定手順書に 「プリンタの設定時に、ポート xxxx を使用するように設定してください」 と書いておく必要がある、といった感じです。 というわけで、標準的でないポートを使うことはできますが、 なにかとめんどくさい、という感じです。また、外部向けの サービスであれば、ファイアウォールで弾かれたりする危険性は 高まりますね。 |
|
irix使ってますが、ls -lでfileの詳細を見ると、拡張子の後に*が表示されてます。これはなにを意味するのでしょうか? |
|
>>3546 yosi 実行ファイルと思われます。ls の -F オプションの説明を読んでください。 |
|
UNIXのCシェル2点につてい教えて下さい。 1点目 以下の、a.txtファイルから第1フィールドの値を 先頭の'0' or "> 0 "のゴミを取って、10桁(先頭0なし)だけを また、第1フィールドの文末の半角スペースや’|’を取ってとり だしたいのですが、第1フィールはawkを使って取得できますが、 その後に編集ができません。たしか、sedの何かを使えば数字のみ だけを取り出せたと思うのですが、浮かんできません。 教えていただけないでしょうか。 cat a.txt | awk -F"," '{ print $1 }' | sed a.txt 09012345678,aaaa 07055593850,bbbb 9098765432,cccc 7012345678,ddddd > 07012345679 | ,eeeee 07012345670 ,ffff 出力結果 9012345678 7055593850 9098765432 7012345678 7012345679 7012345670 2点目 Cシェルで定義ファイルに設定してある項目を読み込むには どうしたらよいのですか。 定義ファイル MN=ABCDEFG FILE=/work/temp.txt set PARM1 = `grep ^MN 定義ファイル| awk -F"=" '{ print $1 }'` set PARM2 = `grep ^FILE 定義ファイル| awk -F"=" '{ print $1 }'` と繰り返すかないのでしょうか。 また、何も、タブとか半角スペースから始まっている場合もあると思うの ですが、どうすればよいのですか。 |
|
>>3548 つくも 1点目はawkのみで可能。 (古いawkではダメとかあるかも知れないけど。) ------ awk 'BEGIN { FS = "," ; } { i = match($1,"[1-9]"); print substr($1,i,10); }' a.txt ------ 2点目は、こんな事が許されるのか判りませんが ------ eval `awk 'BEGIN{ FS="=" }{ if(NF != 0) print "set " $1 " " $2}' param.txt` ------ 大人しく定義ファイルで「set A=val」と書いて sourceすべきだと思いますが・・・ |
|
>>3549 zsh 2点目は以下の間違い。 ------ eval `awk 'BEGIN{ FS="=" }{ if(NF != 0) print "set " $1 "=" $2 }' param.txt` ------ >68user様 半角カナ失礼しました。 |
|
>>3549 zsh >>3550 zsh ありがとうございました。 両方ともできました。 ただ、2点目については、定義ファイルでの変数名とシェル内での設定 する変数名がことなっていたので最初は誤ってしまいました。 |
|
はじめまして、恵美といいます。 いろいろ検索していましたら、このページにたどり着きました。 私は某会社のSE見習いなのですけれど、perlのリファレンスでつまづき悩んでいます。 ハッシュのリファレンスを上手にコピーする方法がよく、...いえ...さっぱりわからないです。 会社の人にきいたら、リファレンスは知らないと言われ、ダブルショックでした。 リファレンスを、1つ1つコピーすると $hash->{'str'} = $hash2->{'str'}; これだけなのですが、複数の値を同時にコピーするといつも失敗してます。 普通のハッシュでスライスを使うと、 my %hash = (a=>1,b=>2,c=>3); my %hash2 = (x=>11,y=>12,z=>13); @hash{'a','c'} = @hash2{'x','z'}; print $hash{'a'},$hash{'c'},"\n"; 11 13 となるのですけれど、同じことをリファレンスでやると失敗するんですよ。 $hash = {a=>1,b=>2,c=>3}; $hash2 = {x=>11,y=>12,z=>13} このとき、 print $hash->{'a'},$hash->{'c'},"\n"; の答えはどうしたら、 11 13 になるのでしょうか。 よろしくお願いします。 |
|
>>3552 恵美 - ($x{'k1'}, $x{'k2'}) は @x{'k1','k2'} と等価 (*1)。 - ハッシュのリファレンス $y のデリファレンスは $$y{'k1'} ($y->{'k1'} と同じ)。 をふまえた上で、今回は ($$y{'k1'}, $$y{'k2'}) を代入したい ので、*1 を素直に置き換えると @$hash{'a','c'} = @$hash2{'x','z'}; となります。 てゆーか、ハッシュスライスは使わない方がいいですよ。配列と 間違えやすいので、可読性低すぎです。わたしなら 2 項目であれば $hash->{'a'} = $hash2->{'x'}; $hash->{'c'} = $hash2->{'z'}; と 2行で書きます。 どうしても短く書きたい場合でも ($hash->{'a'}, $hash->{'c'}) = ($hash2->{'x'}, $hash2->{'z'}); とします。 項目数が多いなら my %map_table = ('x'=>'a', 'z'=>'c'); while (my ($fromkey, $tokey) = each %map_table){ $hash->{$tokey} = $hash2{$fromkey}; } とか。長くはなりますが、項目の対応がもっともわかりやすく、タイプ ミス ($hash と $hash2 を書き間違えるとか) の可能性も減ります。 |
|
こんにちは恵美です。 どうもありがとうです(^^)v すっかり解決して嬉しいです。 リファレンスはいまいちよくわかってないけど... 複数行で記述するのを1行でって思ってずっと悩んでいたんだけど、心の中を読まれちゃったかな... なんか、すごすぎるページなのでちょくちょく見に来ます。 おやすみなさい。 今日はありがとう(^^) |
|
はじめまして、瀧上と申します。 現在UNIX環境でのバッチ処理方式・環境設計を行っています。 開発経験はあるのですが、環境構築からやるのは初めてで頭を悩ましています。宜しければ下記の点についてご教授下さい。 デバッグメッセージの出力有無の切替について教えて下さい。 開発言語はCシェル&Cです。 以前のプロジェクトではC言語におけるデバッグメッセージを出力するしないを、環境変数で設定してしました。おそらく、これを見る事によりデバッグメッセージ出力用の共通関数にデバッグのON/OFFを切り替えさせていたのだと思います。 もし、上記以外に一般的な(適切)な方法があるなら教えて下さい。 レベルの低い質問で申し訳ないのですが、よろしくお願い致します。 ※UNIXの環境構築や、ジョブスケジューラにおけるNET設計の参考となる URLをご存知であれば教えていただきたいです。 |
|
>>3555 瀧上 > 上記以外に一般的な(適切)な方法があるなら教えて下さい。 しょせん決め事なので、一般解はありませんが、 - コマンドオプション (--debug や -d など) を指定する - make debug で、デバッグ用バイナリを生成する - make install すると ~/bin/ に通常バイナリを、~/bin/debug/ にデバッグ用バイナリを格納する などの方法があります。 どれでもいいので、いずれかをプロジェクトのルールとして決定して おくのがよいでしょう。 わたしの場合、 「デバッグモードは開発時のためのモードではなく、通常運用時や 後々のバグ追及時にこそ有用なもの」 という考え方なので、わたしが好む方法は以下の通りです。 - デバッグモードを実装する。デバッグモードの場合、rollback するなどして、データを一切更新しないようにする (まわりの環境に 一切影響を与えない) - デバッグモードとは別に、冗長なメッセージを出すだけの冗長 モード (verbose モード) を実装する。冗長モードの場合は、 通常どおりデータを更新する。 - エラー発生に気づきやすいよう、ログに吐いたメッセージは 標準出力・標準エラー出力にも吐くようにする。 - オプションでデバッグモード・冗長モードを切り替えられること。 例えば --debug でデバッグモード、--verbose で冗長モード、など。 デバッグモードの場合、自動的に冗長モードも有効にするようにする。 コード例は以下の通り。 int debug_flg = 0; int verbose_flg = 0; for ( i=1 ; i<argc ; i++ ){ if ( strcmp(argv[i], "--debug") == 0 ){ debug_flg = 1; verbose_flg = 1; } if ( strcmp(argv[i], "--verbose") == 0 ){ verbose_flg = 1; } } /* こんな感じで各種情報を出力 */ verbose("ほげほげ foo=[%d]", foo); .... if ( debug_flg ){ EXEC SQL ROLLBACK RELEASE WORK; } else { EXEC SQL COMMIT RELEASE WORK; } void verbose(char *fmt, ... ){ va_list ap; char buf[8192]; /* verbose モードでなければ、何もしない */ if ( ! verbose_flg ){ return; } va_start(ap, fmt); vsnprintf(buf, sizeof(buf-1), fmt, ap); va_end(ap); fprintf(stderr, "debug: %s", buf); } 使い方としては、 - 単に詳細なメッセージを表示したい場合は冗長モードを使う。 - まわりの環境に影響を与えず、とりあえずうまく動くか確かめたい 場合はデバッグモードを使う。 となります。 > UNIXの環境構築 UNIX の環境構築と言っても範囲が広すぎるので、なんともいえません。 > ジョブスケジューラにおけるNET設計 これは何でしょうか? JP1 とかの話? |
|
大変参考になります。 方式だけでなく、考え方とコードまで載せていただいたのは恐縮です。 参考例を深慮して方式を定めます。 ありがとうございました。 > UNIXの環境構築 UNIX の環境構築と言っても範囲が広すぎるので、なんともいえません。 →そうですね、すみません、主にUNIX環境でのバッチ処理におけるShellの置き場所や構成の最適な方式を調査できるHPを探していました。「コンパイラ等、ツールの環境(変数)設定ファイルは全て別で持つのが好ましいのか」、、とか、「バッチ処理起動shellでsourceする環境設定ファイルにディレクトリとOracleSIDを考えているが、これが最適なのか?」等です。。。開発、本番時に必要な要件を洗い出していけばおのずと出てくると思うので、考えてみます。 開発とUNIXでの開発経験が乏しいので、自分の知っている方式を、プロジェクトの標準として使っていいのか不安なのです(^^;) > ジョブスケジューラにおけるNET設計 これは何でしょうか? JP1 とかの話? そうです。本日書籍購入しました。上記と同じで、もし有効なHP等ご存知であれば教えてもらいたいと思ったので。。。。 |
|
>>3557 瀧上 > 主にUNIX環境でのバッチ処理におけるShellの置き場所や > 構成の最適な方式を調査できるHPを探していました。 そういうことを書いている web は見たことないですね。基本的に趣味で やってる人には関係ないし、それを知ってる企業は「ノウハウ」として 隠してしまいますので。 # しょーもないやり方を「ノウハウ」などと称しているところも # 多いわけですが。 ちょっと長くなりますが、まぁひととおり書いてみます。 まず、ユーザを複数作ります。例えばユーザ名が hoge なら、 hogedevel (開発環境) hogesi (SI (結合テスト) 環境) hogert (RT (受入テスト) 環境) の 3つくらい。それぞれのホームディレクトリは /home/hogedevel, /home/hogesi, /home/hogert などとします。 さらに DB が必要であれば、これも 3つ (hogedevel, hogesi, hogert) 作ります。 通常の開発は hogedevel を使います。hogesi や hogert は テストの段階で初めて使います。 「開発者は基本的に hogedevel しか使ってはいけない」 というシバリを入れるのもよいでしょう。 各ホームディレクトリの下には src/ ソース置き場。CVS などでソース管理すること。 conf/ 手で管理する設定ファイルなどを置く場所。 bin/ バイナリ置き場。src で make install すると作成される。 lib/ バイナリ以外の設定ファイルやデータファイルなど。 src で make install すると作成されるものに限る。 log/ ログファイル置き場 dat/ 生成するデータファイル・他から送られてきたデータファイル とします。 つまり src/ で make install すると bin/, lib/ が作成される わけなので、bin/ や lib/ は消しても src/ を元に再作成する ことができます。 しかし conf/ は手動管理の設定ファイル群なので、こちらは 消してはいけません (conf/ も CVS などで管理するのがよい でしょう)。 lib/ には、プログラムで生成する雛型のファイルとか、SQL*Loader 用に喰わせるファイルなど、devel, si, rt で共用のファイルを置き ます (実行形式のバイナリではないけど、プログラムの一部と見なして よいものを置く)。 で、環境変数は /home/hogedevel/conf/env.sh /home/hogesi/conf/env.sh /home/hogert/conf/env.sh に ORACLE_SID=hogedevel HOME=/home/hogedevel PATH=/home/hogedevel/bin ORACLE_HOME=... 書きます。 これを source して各アプリが起動し、 - DB の接続先は $ORACLE_SID とする - $HOME/log/ にログを吐く - $HOME/data/ にデータファイルを作成する とします。 というわけで、基本的には > バッチ処理起動shellでsourceする環境設定ファイルにディレクトリと > OracleSIDを考えているが、これが最適なのか? それでよいと思います。 > コンパイラ等、ツールの環境(変数)設定ファイルは全て別で持つのが > 好ましいのか どういうファイルのことを指しているのかよくわかりませんが、 $ORACLE_HOME/precomp/lib/env_precomp.mk とかですか? 基本的に、この辺は共通でよいのではないでしょうか。もし、一部の プログラムで特殊なことをしたければ Makefile 内で上書きすればよい わけで。 あと、いくつか気をつけるポイントをあげておきます。 - ディレクトリやファイルは絶対に手で作成しない。 手で作成するとかならずミスするので、全て Makefile に 記述する。 - CVS などのソース管理ツールを活用する。 /home/hoge{si,rt}/src/ に手でソースを配置し、手で make install する、というやり方は極力避ける。CVS などでマスタ管理し、 毎日朝 AM6:00 に、自動的に ~hoge{si,rt}/src にソースを checkout し、make install などと、全てを自動化するのがベスト。 この他に何か質問があれば、もう少しポイントを絞って、具体例を あげてください。 >> これは何でしょうか? JP1 とかの話? > そうです。本日書籍購入しました。 非オープン系なアプリの場合、web 上からの情報収集は厳しいかと 思います。 JP1 は使ったことがないのでわかりません (わたしは cron の代替品、程度の 認識しかありませんが)。やっぱり便利なんですかねぇ。 |
|
>>3558 68user > しかし conf/ は手動管理の設定ファイル群なので、こちらは > 消してはいけません (conf/ も CVS などで管理するのがよい > でしょう)。 lib/ との違いがわかりづらい気がするので補足。 hoge{devel,si,rt} で異なる設定ファイルは conf/ に、そうでない ものは lib/ に置く、という意味です。 もちろん make 時に環境によって異なるファイルを lib/ にインス トールできれば conf/ などいらないのですが、それを実現するためにMakefile に複雑な細工をしなければいけないケースがあったりするので。 |
|
おひさしぶりです。困ったときばっかり登場してすみません。 たぶんあけましておめでとうございます。 ここ5年ぐらいメンテしてる CGI なんですが、 根本的な改革を迫られました。 A.cgi が生成するページにおいて、 ボタンを押したら(可変パラメータ付きで) B.cgi が生成するページに進み、 リンクを押したら(可変パラメータなしで) C.cgi が生成するページに進むという実装になっています。 ところが、ここで C.cgi にも A.cgi で選択入力する可変パラメータを渡さなければ ならなくなったのです。 A、B、C 非常に肥大化していて、安易な解決法が欲しい状況です。 CGI のみで解決できればうれしいですが、 場合によっては JavaScript でもかまいません。 なにかあればご教示願えれば幸甚です。よろしくお願いします。 |
|
>>3560 ふくし これを機にリファクタリングした方が、のちのち幸せになれると 思いますよ。 …というのは十分承知しておられると思うので、その場 しのぎな案を 2つばかり。 1. B.cgi で受けたパラメータを print qq(<input type=hidden name="param_from_a" value="$ENV{QUERY_STRING}">\n); などとまるごと C.cgi に渡す。 2. 隠しフレームを作っておいて、A.cgi で選択されたら onClick などでフォーム内容を隠しフレームに転記して おき、(B.cgi は無修正で) C.cgi がその隠しフレームを読む。 |
|
アクセスが遅くなり申し訳ありません。瀧上です。 丁寧なご回答ありがとうございます。 工程別のユーザの切り分けは私の方でも近い形で考えており、ご回答に近い形で定めようと思っています。→開発環境ではユーザを分けますが。 とりあえず考え方に大きなずれが無い事が判明してほっとしています。 ディレクトリですがConfの概念は無くこれはこちらを参考に構成を考えようと思います。CVSはシステム標準で構成管理ツールとして使用することが決定しています。デバッグモードの考え方は、色濃く方式に出そうです(^^;) ところで申し訳ないのですがもう少し勉強させてもらいたい事がありまして、お言葉に甘えていくつか質問させてください。 →たとえばログイン時に「.cshrc」から「環境変数設定ファイル」をSourceしたとして、この時「環境変数設定ファイル」から設定した環境変数は、サーバDOWNかそれを書き換えるまで確実に保証されるのでしょうか? →LIBがmakeInstall時に取り込まれるものだとしたら、 動的なライブラリはUNIXにおける開発ではあまり使用しないものなのですしょうか?システム共通部品等は動的ライブラリから呼び出すのが一般的かなと思っているのですが。 /COMMON/bin/xxxxx.so←拡張子も「.so」一般的なのか疑問ですが、 dllでは無いと思うので。。。 もしくは実行ファイルとしてbinに持つ? |
|
>>3651 68user すいません、題意を間違えて伝えたかもしれません。 これでよかったです。 A.CGI start_form(action="B.CGI"); フォーム要素1; end_form; start_form(action="C.CGI"); フォーム要素2; end_form; 要は B と C に別の可変要素を渡すのなら、これでできたんですね。 昨日それでできるんじゃないカナと思ってたんですが、 コードにバグをつくっていました。 なお、ボタンを submit にしないで、name をつけ、 name を JavaScript で読み取って切り分ける、という方法も あるようです。これならフォーム要素を共有できるな。 http://webmaster.hatena.ne.jp/1069376628 ★ 事情を説明すると、5年越しということでおわかりいただけると 思いますが、FileMaker で作っていた経理システムが 2000 年問題で 止まる(私製のテンプレートがダサくて)という話があり、 その時個人的に見積書を CGI で出していたことがバレ、 2000 年の 3 月にはちゃんとした業者ウェアを入れるから それまでそれっぽいものを動かしてよ、と言われました。 で、2000 年の 3 月に、業者ウェアの日本語対応ができないと分かり (ガイシ系なんで・・・) その年いっぱい動かすことになりました。 以下、同じことが 200年、2001年、2002年、2003年に起こりました。 いよいよ今年の5月にこのシステムが正式に引退させることが 決定した(・・・)のですが、その前にどうしても大きな山を 乗り越えるためにプログラムを改造することになったのです。 でも「どうせ5月に引退すると決まっているシステムに大金を 投じるわけにはいかない」ので、それだけに長い時間を避けないんです。 人生いろいろですね:) |
|
教えてください。 指定したポートを開放するために必要なinetd.confの設定方法を教えてください。また、他に必要な設定が必要でしょうか。 ご教授お願い致します。 |
|
>>3562 瀧上 > たとえばログイン時に「.cshrc」から「環境変数設定ファイル」を > Sourceしたとして、この時「環境変数設定ファイル」から設定した > 環境変数は、サーバDOWNかそれを書き換えるまで確実に保証される > のでしょうか? setenv で更新したら変更されます。.cshrc を更新しても、 明示的に source したり、ログインしなおさないと反映 されません。 よって、プログラムの先頭で source するか、cron であれば * * * * * . /home/hoge/env.sh && /home/hoge/bin/foo としておくのがよいでしょう (JP1 でも何かしら環境変数を 指定するような設定があるのではないかと想像します)。 > LIBがmakeInstall時に取り込まれるものだとしたら、 そういう意図ではなく、実行時に必要ないろいろなファイルの 置き場所、として書きました。 もし動的ライブラリを使うなら lib/ に置くことになる でしょうね。 でなくて、静的にリンクするなら、ライブラリは src/ の 下だけ置いて、アプリのmake install 時にリンクしmasu. ライブラリ自体は lib/ に make install しません (実行時 には必要ないので)。 で、それはそれとして > 動的なライブラリはUNIXにおける開発ではあまり使用しない > ものなのですしょうか? についてですが、わたしの場合は静的にリンクする方法を 好みますが、別に動的リンクがダメと言うほどではないです。 業務系では多少のメモリ使用量の多寡ははどうでもよいので、 構成管理のやりやすさだけを考慮すれば構わないと考えます。 で、例えば、 1. ライブラリ関数 func をプログラム A・B・C が使用している。 2. プログラム A に不具合が発生。すぐに修正版をリリース しなければならない。 3. 原因は func であることが判明。しかし func の呼び出し方の 違いから、プログラム B・C ではこの現象は発生しない。 という状況を考えます。 静的にリンクしている場合、もし人的リソースに余裕があり、 func 修正時にプログラム A・B・C のテストをすることができる なら、修正版 func のリリース時にプログラム A・B・C を再 コンパイルすることができます (これが最も望ましい)。 しかし、プログラム B・C をテストする余裕がない場合、 func を修正して再コンパイルし、プログラム A を再コンパイル とすることで、プログラム B・C に影響を与えず func を修正 するという選択肢をとることができます。 ただしこれは プログラム A が使用している func と、プログラム B・C が使用している func が異なる という管理しづらい状況になるため、次期リリース時に全てを 再コンパイルするまでの時間かせぎです。 つまり、静的リンクの場合、 目の前のリスクを少なくしたいなら → プログラム A のみを再コンパイル 構成を単純にしたいなら → プログラム A・B・C を再コンパイル と、状況に応じた選択が可能です。 しかし動的ライブラリだと、動的ライブラリを入れ替えて、 プログラム B・C に不具合が出るかもしれないリスクを負う という選択肢しかありません。 よって、わたしは静的にリンクする方を選びます。 ただし静的リンクの場合、再コンパイル忘れなどで各プログラムが 使用しているライブラリのバージョンが異なる、という状況が発生 する可能性がありますが、この対策として、定期リリース時に商用 環境の - 全ソース・全プログラムを削除 - 最新版のソースを全て再コンパイル - 全プログラムを make install とすれば OK でしょう (最上位ディレクトリで make && make install すれば全アプリ入れ替え完了)。 # 仮に動的リンクを選択したとしても、上記の「定期リリース # ごとに全部インストールしなおす」というやり方は強く # おすすめしておきます。 |
|
>>3564 たけ > 指定したポートを開放するために必要なinetd.confの > 設定方法を教えてください。 質問が曖昧すぎて答えられません。inetd のマニュアルと /etc/inetd.conf にある他の設定例を見てください。 それでもわからなければ、何がしたいのかを明記した上で 再度質問してください。 |
|
はじめまして。初心者ですが、コマンドはどこに打てばいいんですか? |
|
以下のようなファイルからaddとmodとdelのerrrorがある行を 取り出したいのですが、 ------ ここから ----------- ---- server1 ---- add:yamada:success add:saito:error mod:yamamoto:success mod:ikeda:error del:yamaguchi:success del:butou:error ---- server2 ----- add:yamada:success add:saito:error mod:yamamoto:success mod:ikeda:error del:yamaguchi:success del:butou:error ------ ここまで ---------- grep -v "\-\-\-" ファイル名 | grep -v success で一応とりだせるのですが、改行の2行が含まれて しまいます。空改行を含まず1回の処理でやりたいのですが どうすればよいのですか。 |
|
>>3568 すすむ 環境を書き忘れました。 SunOSで、Bシェルです。 |
|
>>3568 すすむ errorを取り出したいなら素直に grep ":error" filename とすれば良いのでは? まぁ名前にerrorが含まれる人がいると引っかかってしまうので 正規表現使うべきなんだろうけど。 |
|
>>3568 すすむ 賢いかはわかりませんが、 grep -v "\-----" ファイル名 | grep -v success | awk '{ if(NF != 0) print $0 }' でできませんか。 |
|
>>3568 すすむ 「success」と「error」と簡単に書きましたが、 成功の場合は、「success」で、失敗の場合は、エラーメッセージが でます。 「error」だけでは、引っ掛けられません。 |
|
>>3567 うこん あなたが置かれている状況がわからないので、回答できません。 >>3568 すすむ わたしなら egrep '^(add|mod|del):' | grep -v ':success$' とします。 |
|
>>3572 すすむ であれば、 egrep -v '^(-|$|.*:success$)' filename とか? |
|
>>3573 68user >>3574 zsh zshさん、68userさん ありがとうございます。 egrepですか。 使用したことがないのですが、 「'^(-|$|.*:success$)' 」 の使い方につてい教えてください。 |
|
>>3561 68user > 1. B.cgi で受けたパラメータを > print qq(<input type=hidden name="param_from_a" > value="$ENV{QUERY_STRING}">\n); > などとまるごと C.cgi に渡す。 「などと」と書いてあるので, 細かいところは省略してあるのでしょうが このままの記述ですと, パラメータの区切りが「&」という前提にて パラメータの名前が「copy」や「reg」だった時に悲しい結果が待ってます。 理由はこのへん http://www.ne.jp/asahi/minazuki/bakera/html/opinion/ampersand |
|
>>3565 ご回答ありがとうございます。 ライブラリの考え方は参考になります。 要件が無ければ原則禁止にしてしまおうかななんて。。。検討中です。。 ところでshellでバッチを走らせる時はユーザ設定を行わないようにするのがいいのですね。UNIXの部屋にある↓を見て気づきました。 「#!/bin/csh -f というのをよく見かけるが、その場合ユーザ独自の ~/.cshrc は読まれないので、エイリアスやシェル変数は使用できなくなる。」 なので今回はshellの構成は下記の様にするつもりです。ご報告まで。。。 ---------------------------------- #!/bin/csh -f #------------------- #shell # #------------------- source COMMON.src #→システム共通のパス(oracle等)や文字指定(LANG等) source 環境.env #→システム共通環境変数設定等 処理・・・・ ----------------------- |
|
Makeの環境について教えて下さい。 現在下記のディレクトリを作成して開発環境としようと考えていました。 /src /* makefileとsrcを保管 */ /obj /* make時の中間ファイルを保管 */ /bin /* 実行ファイルを保管 */ するとあるガイドに「.oと.cを別ディレクトリに置くとmake時のタイムスタンプの比較が困難になるのでやめるべきだ」、と書いてありました。 「個々の依存関係をいちいち指定しなければならない。」ともあり、「いちいち」等と書かれると非常に非効率な事の様に感じるのですが。。。 「.cと.oは同一ディレクトリに持つ」が一般開発業務で用いられる主要な方式なのでしょうか? 単体環境だと不特定多数の人間が多様なsrcファイルを作るのであまり余計なファイルを置いてごちゃごちゃさせたくないと言うのが理由で分けてるだけなので同一ディレクトリも特に問題は無いのですが。。。(消されても問題は無いファイルですし。。) 依存関係をmakefileに指定して別ディレクトリ管理と言うのはやらないのですかね? |
|
No.3568さんに似たような質問なんですが、 ファイルが以下のようにあったとします。 _________________________________________ aaa bb ccc 02/22 ddd e1.3 fff _________________________________________ その時に、実行するたびにe1.3の数字をe1.4、e1.5と実行 するたびに数字を0.1ずつ変更したいんですがCシェルで そのような事をしたいのですが、どうしたらいいのでしょうか。 ご教授お願いします。 |
|
>>3579 UNIX10ヶ月目 例えば、0.0から9.9まで表示するには以下のような方法があります。 ------ @ i = 0 while ( $i < 10 ) @ j = 0 @ n = $i * 10 while ( $j < 10 ) @ m = $n + $j set cnt = `echo "scale=1; $m/10" | bc` printf "0.1f\n" $cnt @ j++ end @ i++ end ------ ※:シェル変数cntに代入してprintfしているのは、0.0を出力するためです。 >>3575 すすむ 申し訳ありませんが、正規表現について解説された書籍を見るか Webサイト等を探してください。 自分で回答しておいてなんですが、68user様の方法が良いと思います。 自分のはコマンドを強引に1つにまとめただけですので。 |
|
Bシェルにつてい教えて下さい。 Bシェルで一次元配列を使用しているのですが、 HP-UX11.00で動いていたシェルスクリプトをSunOS5.8に移して 動かしたのですが上手くうごきません。 MONTHES[0]=Dec: 見つかりません。 MONTHES[1]=Jan: 見つかりません。 : 置換が正しくありません。 となります。 どうのように修正すれば、動きますか。 ------------------ #!/bin/sh # MONTHES[0]="Dec" MONTHES[1]="Jan" MONTHES[2]="Feb" MONTHES[3]="Mar" MONTHES[4]="Apr" MONTHES[5]="May" MONTHES[6]="Jun" MONTHES[7]="Jul" MONTHES[8]="Aug" MONTHES[9]="Sep" MONTHES[10]="Oct" MONTHES[11]="Nov" i=0 while [ $i -le 11 ] do echo ${MONTHES[$i]} i=`expr $i + 1` done |
|
これなら動く筈。(未確認) ------------------ #!/bin/sh # MONTHES0="Dec" MONTHES1="Jan" MONTHES2="Feb" MONTHES3="Mar" MONTHES4="Apr" MONTHES5="May" MONTHES6="Jun" MONTHES7="Jul" MONTHES8="Aug" MONTHES9="Sep" MONTHES10="Oct" MONTHES11="Nov" i=0 while [ $i -le 11 ] do eval echo $"MONTHES$i" i=`expr $i + 1` done |
|
>3582 zshさん ありがとうございます。 上手くいきました。 |
|
>3582 UNIXといってもHP-UXとSunOS(Solaris)で違うのだから Bシェルだからといって同じ機能jが使えるわけではない のですね。 |
|
>>3584 つとむ HP-UXは知らないのですが、配列使えるあたりがkshっぽいですね。 他の部分(スクリプト)がどうなっているかにもよりますが kshに変えたほうが修正が少なくて済むかも知れません。 下ののシェルだったら、 一行目を「#!/bin/ksh」に変えるだけで動きそうです。 |
|
はじめまして。本日暗号化について調べていたらこのホームページにたどり着きました。暗号化したいのは会社でPOPメールの受信ができないためメールを受信して暗号化し、Webメールなどに投げるようなプログラムでも作ろうかと思い立っていたため、こちらのホームページの内容は非常に役に立ちました。ありがとうございます。 |
|
>>3577 瀧上 > 「.oと.cを別ディレクトリに置くとmake時のタイムスタンプの > 比較が困難になるのでやめるべきだ」 かどうかは知りませんが、とりあえずわたしは .o と .c を別にするやり方を知りません。 # *BSD などは .c と .o が別になっているので、やろうと # 思えばできるとは思いますが。 で、分ける必要があるかどうかですが、 > あまり余計なファイルを置いてごちゃごちゃさせたくない という理由であれば、cvs add しなければリポジトリに 登録されないので、「*.o は cvs add してはいけない」 という教育さえしておけば十分ではないでしょうか。 時間が経つにつれソース置き場にゴミがたまるのが嫌だ ということであれば、定期的にソース置き場を削除し、 checkout することをお勧めします。 わたしは開発環境であっても、毎日ソース置き場を削除、 checkout、make、make install して、まっさらにする 方法が好みです。 # メンバ全員のアカウントをあらかじめ作成しておき、 # 開発は、各メンバのホームディレクトリで行わせる。 >>3585 zsh > HP-UXは知らないのですが、配列使えるあたりがksh > っぽいですね。 /usr/xpg4/ に POSIX 系を集めている Solaris とは 違い、HP-UX は OS 全体として POSIX を重視している ような印象を受けます。sh と ksh は別コマンドに なってはいますが、sh はかなり POSIX 寄りです。 Bourne shell は /usr/old/bin/sh にあったりします。 >>3575 すすむ > 「'^(-|$|.*:success$)' 」 'a(x|y|z)' は ax か ay か az にマッチするので、 '^(-|$|.*:success$)' は ^- か ^$ か ^.*:success$ にマッチします。後は正規表現を勉強してください。 |
|
>>3586 まさどん ありがとうございます。 ついでと言ってはアレですが、掲示板の名称を 「UNIX、CGI、ネットワーク、Java Servlet についての掲示板」 改め 「UNIX、CGI、ネットワーク、暗号技術についての掲示板」 としました。 ついでに今日調べたことのメモ。OpenSSL を使って RSA で暗号化 & 復号化。 --------- ここから --------- #include <stdio.h> #include <openssl/rsa.h> #include <openssl/engine.h> int main(){ unsigned char plain_str[]="hogehoge"; unsigned char crypted_str[200]; unsigned char decrypted_str[200]; char errbuf[1024]; RSA *rsa; int n; ERR_load_crypto_strings(); rsa = RSA_generate_key(1024, 65537, NULL, NULL); printf("rsa->n = 0x"); BN_print_fp(stdout, rsa->n); putchar('\n'); printf("rsa->e = 0x"); BN_print_fp(stdout, rsa->e); putchar('\n'); printf("rsa->d = 0x"); BN_print_fp(stdout, rsa->d); putchar('\n'); printf("rsa->p = 0x"); BN_print_fp(stdout, rsa->p); putchar('\n'); printf("rsa->q = 0x"); BN_print_fp(stdout, rsa->q); putchar('\n'); /* printf("RSA_size(rsa)=%d\n", RSA_size(rsa)); */ /* 暗号化 */ n = RSA_private_encrypt(strlen(plain_str), plain_str, crypted_str, rsa, RSA_PKCS1_PADDING); if ( n == -1 ){ printf("in encrypt: err=%s\n", ERR_error_string(ERR_get_error(), errbuf)); goto ERR; } /* printf("%s\n", crypted_str);*/ /* 復号化 */ n = RSA_public_decrypt(n, crypted_str, decrypted_str, rsa, RSA_PKCS1_PADDING); if ( n == -1 ){ printf("in decrypt: err=%s\n", ERR_error_string(ERR_get_error(), errbuf)); goto ERR; } /* 検証 */ if ( strncmp(plain_str, decrypted_str, n) == 0 ){ printf("OK! plain_str=[%s] decrypted_str=[%.*s]\n", plain_str, n, decrypted_str); } else { printf("NG! plain_str=[%s] decrypted_str=[%.*s]\n", plain_str, n, decrypted_str); goto ERR; } return 1; ERR: RSA_free(rsa); return 0; } --------- ここまで --------- 実行例: rsa->n = 0xCA0CBEC6C0384F0387557A9E27A60A9039AB9FAC4D4AE1DA1E08F00093632FAA734AF75E86632E7AFC660A00BF1D703902B57B64CFACD0069314A105295F7624157D3A484C6E1FEBA5A46047E6AE91161DCD51BA7D75B83358F3506D069AEB987D183C0FC21C1BE1F2DF5A0BFF991DB13EFD1E9F079E92BE25CB2BB7D7AD703F rsa->e = 0x10001 rsa->d = 0x35DA87CEF9D5085A6C6C002EBF6AA64E22D0F7D23917C87316A653321416CFD1A2C14C85C9540E43819AC0F7C9F8D2BC9F5837F77AD318EF67AC8BEE90447D7C4F705C57130095BFB51697ECB64CF686414980E1BC814F6AD3EDB3BC2232F88D32892592093E6103AAF89C23B9544254386611B145B9327AA074398D15E60A41 rsa->p = 0xE4A4D51718E83BF3CF91E0C187EB910FFAED34C37858667A6C27F83020DCF7D2DABA5D0B2CD0FAD0A075E06938420F09111F0A5DEA9B443CAAF6674C343944E7 rsa->q = 0xE2395BC32DAA75945F637F88F9BB7C05157464C99168E229E5ED86A3A1EE19498BC357E849505F3C2CA7DC868068880E14FA7ADA01B7BD9897A18FB3573336E9 OK! plain_str=[hogehoge] decrypted_str=[hogehoge] RSA_generate_key() で RSA 鍵を生成できる。 引数: 鍵の bit 数 (この例では 1024 bit)、e (3,17,65537 など)、その他 鍵長についてはよくわからない。上記の例 (平文が hogehoge) では、bit 数を 145 以上にしないと encyrypt 時にエラーになる。なぜ 145? 平文を m として、 m<n ならよいのではないの? 戻り値は typedef struct { BIGNUM *n; BIGNUM *e; BIGNUM *d; BIGNUM *p; } RSA; 的な構造体のポインタ。これが RSA 鍵。詳細は rsa(3)。 それぞれ、以下のような感じ。 e: encryption exponent (OpenSSL 的には public exponent。暗号化指数) ここでは 65537 (=0x10001)。 n: RSA-modules (OpenSSL 的には public modulus と表記) d: decryption exponent (OpenSSL 的には private exponent。復号化指数) p,q: 素数のペア 公開鍵は e,n。秘密鍵は d,n。ただし、「秘密鍵は d」と定義している web・本も散見される。どちらが正しい? まぁ n は公開するわけなので、 どっちでもいいのか? BIGNUM は OpenSSL 付属の多倍長整数ライブラリ。上記の例のように BN_print_fp などを使うことで、内容を確認できる。詳細は bn(3)。 ちなみに BIO は OpenSSL 付属の I/O 抽象化レイヤ。詳細は bio(3)。 crypto 関係のエラーコードは unsigned long ERR_get_error(void) を 使うことで取得できる。そのコードを ERR_get_string() に喰わせると error:0407006A:lib(4):func(112):reason(106) という文字列が得られるが、これではわけがわからん。そこで、あらかじめ ERR_load_crypto_strings(); としておけば、ERR_get_string() の結果が error:0407006A:rsa routines:RSA_padding_check_PKCS1_type_1:block type is not 01 という文字列になる。ちなみに % openssl errstr 0407006A error:0407006A:rsa routines:RSA_padding_check_PKCS1_type_1:block type is not 01 とすればコマンドラインからでも取得可能。 RSA の秘密鍵による暗号化は RSA_private_encrypt() を使う。 第四引数はパディング方式。ここでは RSA_PKCS1_PADDING として いるので、PKCS#1 の方式で勝手にパディングしてくれる。 RSA_NO_PADDING を選ぶとパディングが行われないので、呼び出し側が 平文を適切な長さにパディングする必要がある。RSA_private_encrypt の 戻り値は暗号文の長さ。 復号化は RSA_public_decrypt() で。戻り値は復号化した結果の 長さ。復号化されたデータの文字終端などが自動でセットされる わけではないので、printf("%.*s") などと自分で長さを管理すること。 上記の例では、暗号化した文字列を unsigned char crypted_str[200] に入れているが、正しくは RSA_size() で得た長さ分の領域を確保して おくこと。 参考: http://www.cybersyndrome.net/rsa/ |
|
RSA で暗号化してみよう (1)・(2) を作成しました。間違いや わかりにくい部分の指摘は大歓迎です。 http://x68000.startshop.co.jp/~68user/net/rsa-1.html http://x68000.startshop.co.jp/~68user/net/rsa-2.html しかし暗号はおもしろい。何かリクエストがあれば (わたしの レベルを見極めた上で) 書いてください。 |
|
暗号技術大全を持ってらしているのですね。奇遇ですね、僕もこの間 購入してしまいました。僕はハードっぽい図と数学っぽいところに惹 かれて、立ち読みじゃ飽き足らず、買ってしまいました。 #眠いときは枕代わりになるし、持って動かせば筋トレにもなるし、 #一冊三鳥にもなる、良い本です。←冗談です・・・ 今のところリクエストはありませんが、確かに暗号技術は面白いの で、そのうちあるかもしれません。その節は宜しくお願いいたします。 それに、妖精現実フェアリアルも参考にされているのですね! 僕は 双方向処理で行き着いたところは異なりますが、これも奇遇ですね。 というか、そのサイトは凄すぎです。作者は何者なんだ?と思いつつ、 読んでいます。 #全く関係ないですが、Java Servletは興味から外れたのですか? ご存知だとは思いますが、妖精現実フェアリアルから引用しますので、 ご参考までに。 このウェブサイトは、まもなく終了します。 このページに書いてあった 情報は、特に断り書きがない限り、自由に使ってください(コピー、 改変を含む)。 転載先においても転載自由にしてかまいません。 |
|
>>3590 へにか > 暗号技術大全を持ってらしているのですね。 まぁ理解できていませんけどね。 理論を学びたいと思って、他にも以下の本を買ってみました。 理解できたかどうかは聞かないでください。 暗号理論入門 http://www.amazon.co.jp/exec/obidos/ASIN/4320120442/249-3448296-8649958 暗号の代数理論 http://www.amazon.co.jp/exec/obidos/ASIN/4431708472/249-3448296-8649958 代数と数論の基礎 http://www.kyoritsu-pub.co.jp/series/21seiki/01561-4.html 暗号は技術的にも非常に面白いですが、暗号として強いのか 弱いのかが第三者からはっきり評価される世界ですので、 やじうま的視点で見ても、とてもおもしろいです。 http://x68000.startshop.co.jp/~68user/net/crypt-1.html で紹介した すずきひろのぶ氏の AES 選定にまつわる話も そうですが、IPA の CRYPTREC http://www.ipa.go.jp/security/enc/CRYPTREC/ に応募したものの、門前払いをくらった暗号がどんなものなのか 調べると、非常に興味深いものがあります。 こんなおもしろい世界を学者のモノだけにしておくのは もったいない。ぜひ興味を持っていただけると幸いです>All > このウェブサイトは、まもなく終了します。 これは前々から気になっています。終了されると非常に困る んですが、webarchive.org (正式にはWayback machine って いうのかな?) があるから まぁ大丈夫かな、と思っています。 # http://web.archive.org/web/*/http://www.faireal.net/articles/7/01/ > Java Servletは興味から外れたのですか? 諸般の事情から、このサーバでは Java Servlet が動かないのです。 そして仕事でも Servlet はやっていないので、遊べる場所がないのです。 今のわたしの興味は 暗号 > 逆転裁判3 > 質の高い業務系システムを構築する方法 >>>> WEB > UNIX > Java です。 |
|
メモ。blowfish による暗号化 & 復号化。 #include <stdio.h> #include <openssl/blowfish.h> int main(int argc, char *argv[]){ BF_KEY key; unsigned char keybuf[]="SECRETKEY!"; unsigned char plain[128]="This is plain!"; unsigned char encrypted[128]; unsigned char decrypted[128]; unsigned char ivec[8]; BF_set_key(&key, strlen(keybuf), keybuf); printf("plain=[%s]\n", plain); memset(ivec, 0, sizeof(ivec)); BF_cbc_encrypt(plain, encrypted, strlen(plain), &key, ivec, BF_ENCRYPT); printf("encrypted=[%s]\n", encrypted); memset(ivec, 0, sizeof(ivec)); BF_cbc_encrypt(encrypted, decrypted, strlen(plain), &key, ivec, BF_DECRYPT); printf("decrypted=[%s]\n", decrypted); return 0; } |
|
ちゃんと読んでません、と書かれているのに突っ込みを入れるのは 失礼かもしれませんが・・・ #こんなこと言っておきながら、嘘だったらごめんなさい。 http://x68000.startshop.co.jp/~68user/net/crypt-1.html で紹介している http://www3.sympatico.ca/wienerfamily/Michael/MichaelPapers/TwokeytripleDES.pdf ですが、確かに2つの鍵を使う3DESは攻撃方法がある、ということも 書いていますが、どっちかって言いますと、既存の方法、すなわち、 §2の、Merkle-Hellman Attackの方法よりも、早い方法がありますよ、 という論文のような気がします。 恐らく、Merkle-Hellman Attackの方法はA=0となる解を2の56乗用意 して、何とかするけれど、この論文の方法はKnown-Plaintextを用いると、 もっと早く解析できますよ、といっているような。 #そのKnown-Plaintextがなんじゃらほい、というところまでは #精査していませんが。 それ以降はハードウェアのインプリメンテーションの話ですね。 |
|
>>3593 へにか ありがとうございます。お返事は後ほど。 で、メモその 2。EVP 版 blowfish 暗号化・復号化。なお、 http://www.openssl.org/docs/crypto/EVP_EncryptInit.html は古いバージョンの API。OpenSSL の web は本当にひどい。 #include <stdio.h> #include <openssl/evp.h> int do_crypt(FILE *in, FILE *out, int enc_mode){ unsigned char key[]="SECRET!"; unsigned char iv[8]; EVP_CIPHER_CTX ctx; char outbuf[256]; int outlen; memset(iv, 0, sizeof(iv)); EVP_CipherInit(&ctx, EVP_bf_cbc(), key, iv, enc_mode); while (1){ char inbuf[128]; int inlen; inlen = fread(inbuf, sizeof(inbuf[0]), sizeof(inbuf)/sizeof(inbuf[0]), in); if ( inlen==0 ){ break; } EVP_CipherUpdate(&ctx, outbuf, &outlen, inbuf, inlen); fwrite(outbuf, sizeof(outbuf[0]), outlen, out); } EVP_CipherFinal(&ctx, outbuf, &outlen); fwrite(outbuf, sizeof(outbuf[0]), outlen, out); return 0; } int main(int argc, char *argv[]){ int enc_mode; if ( argc == 1 ){ printf("Specify enc or dec.\n"); exit(1); } if ( strcmp(argv[1], "enc") == 0 ){ enc_mode = BF_ENCRYPT; } else if ( strcmp(argv[1], "dec") == 0 ){ enc_mode = BF_DECRYPT; } else { printf("Specify enc or dec.\n"); exit(1); } do_crypt(stdin, stdout, enc_mode); return 0; } |
|
>>3587 68user ご回答ありがとうございます。 .oがsrcと同一ディレクトリに存在するのは基本なのですね。 検討した結果、下記の様な仕様にしました。 単体環境:make終了後*.oは自動削除する。単体で1プログラムを対象(実際には共通ライブラリも含まれますが。。)にmakeするのにタイムスタンプを管理する必要は無いと言う結論です。 結合環境:全コンパイルが必要となる結合以降はsrcファイルと同一ディレクトリに.oを保管する。単体完となっているはずなので、修正のあったファイルをupdateするのみとする。 以上結論報告です。(報告されても。。。と思われるかも知れませんが。。(^^;)) |
|
質問するのはお久しぶりです。 つかぬ事をお伺いしますが、VineLinux起動中の停電後の再起動で、 非常に冷や汗モノのメッセージが出現しました。 Mounting proc filesystem: mount /proc/: can't read superblock これがそのメッセージですが、HDDのブート関連の情報が消えたと言う 事になるのでしょうか・・・(死刑宣告?) もしその最悪の状態の場合に、その他のパーティションのデータ復旧は 望めないでしょうか。 ちなみになぜかCDブートも出来ない状態です。 ファイルシステムはex3です。 神様仏様どうか最悪の状態では無いように・・・アーメン 何でこんな時に・・・ |
|
追加情報ですが、df の表示は /dev/hda6 としか表示されません。 fdisk /dev/hda の結果は、Unable to open /dev/hda です。 う〜ん・・・ |
|
>>3593 へにか いまだ調査中、というか英文と格闘中です。 >>3595 瀧上 単体環境と結合環境のやり方を変える必要があるのかどうかは疑問です。 Makefile を 2つ作るのか、Makefile は 1つで、環境変数などを見て 単体環境の場合のみ *.o を削除するのか、などの実現方法がわからない のですが、例えば - Makefile に記述した依存関係が不正確だった - しかし単体環境では毎回全ソースを build するので影響がなかった - ところが結合環境に修正ソースを上げたら、依存関係の不正確さから 狙いのソースがコンパイルされず、古い版の *.o がリンクされてしまった などということにならないでしょうか? ソースが非常に大規模なのでこういう仕組みを作らないと運用できない、 などの理由があるなら仕方ないでしょうが、 単体と結合でやり方が違う というのはミスの元ですので、それなりの利点がないなら避けるべきこと と思います。 > 報告されても。。。と思われるかも知れませんが。。(^^;) 掲示板に質問しておいて結果報告すらしない輩が多いですが、 瀧上さんはちゃんと報告していただけるので、こちらとしても 非常にうれしいことです。 >>3596 スナフキン そこらへん詳しくないんですが、/proc はカーネル内部のプロセス 状態を見るための覗き穴なので、そこで Can't read superblock とは 奇怪なことです (/proc に superblock なんか存在するのか? という話)。 そもそもこのエラーが出た結果、マウント対象となる HDD が読め ないなどの異常が発生しているのでしょうか? もしそうなら /proc マウントにさえ行き着けず、もっと前に /dev/hda などに関する エラーメッセージが表示されているのではないかと思うのですが。 > fdisk /dev/hda の結果は、Unable to open /dev/hda です。 /dev/hda が / なのでしょうか? /etc/fstab を見せていただけませんか? あと、/etc/fstab から /proc に関する行をコメントアウトすると どうなりますか? で、本当に superblock が飛んでいたりするなら、わたしの手には 負えないです。「ext3 superblock 復旧」などでぐぐると、いくつか ヒットするようです。 |
|
早速の御返答ありがとうございます。 /etc/fstab の中身です。(多分大丈夫だと思いますが書き写し漏れがあるかも) LAVEL=/ / ext3 defaults 1 1 LABEL=/boot /boot ext3 defaults 1 2 none /dev/pts devpts gid=5,mode=620 0 0 LABEL=/home /home ext3 defaults 1 2 none /proc /proc defaults 0 0 LABEL=/usr /usr ext3 defaults 1 2 LABEL=/var /var ext3 defaults 1 2 /dev/hda7 swap swap defaults 0 0 /dev/fd0 /mnt/floppy auto noauto,owner,kudzu 0 0 (タブを全角スペースに置き換えしてます) >あと、/etc/fstab から /proc に関する行をコメントアウトすると ダメです。Read Only になっているので書き込みが出来ませんし、 そもそも vi が何も反応せずに起動しません… 植物状態って事?(T@T) 不思議なことに、インストーラーCD内のfdiskだとパーティション情報が 正常に表示されますが、HDDのモノだと前記の通りです。 |
|
>>3599 スナフキン > /etc/fstab の中身です LABEL=... という記述を初めて見たのですが、Linux には ラベルという仕組みがあるのですね。 要は /dev/hdx がどのマウントポイントに相当するのか、 知りたかったのですが、これではわからないですね。ログ ファイルなどに記録が残っていませんか? > Read Only になっているので書き込みが出来ませんし、 mount -o rw,remount /dev/hdx /hoge などで再マウント できませんか? > インストーラーCD内のfdiskだとパーティション情報が > 正常に表示されますが、HDDのモノだと前記の通りです。 正常に表示、とは何が表示されるのですか? わたしは Linux に詳しいわけではないのですが、全体的に 情報が少なすぎます。 Q1. そもそもマシンに何個の HDD が付いているのですか? Q2. そのうちどれが壊れたかわかりますか? その根拠は? Q3. シングルユーザモードで起動して、一部だけでも手動で マウントできませんか? Q4. どこまでマウントに成功しているのですか? / 以外は 全滅ですか? /boot も /usr も /home も /var も 見えないのですか? |
|
ごめんなさい、どんな情報が必要かわからなかったのと、自分でも 何が問題なのかよく判らないもので・・・ >再マウントできませんか? いろいろと指定を変えて試しています。 ただ、パーティンション情報が間違っている時に rw で書き込んで 大丈夫でしょうか? A1 HDDはIDEが一台のみです。 A2 メッセージをかいつまんで見る感じでは、superblock が読めない と表示されているように思いました。 A3 シングルモードで試してみましたがROでマウントされている状態が 変わりません。 A4 起動中に /proc へのアクセスが出来なくてエラーとなっているようです。 /boot /var /usr /proc のマウントが失敗しているようですが、 / に /usr /var というファイルが存在しますが、/proc というファイルは 存在していません。 関連サイトをあさって情報を探していますが、ファイルシステムは(も) よく判らない状態です・・・ ログは /var へアクセスできないのでお手上げです。 |
|
"Merkle-Hellman" DESと、Googleで検索をかけたところ、 http://info.isl.ntt.co.jp/~ohta/BOJ-Seminar.pdf を見つけました。21枚目あたりが参考になるかも知れません。 #なんだか、いらない突っ込みしてしまって、余計な苦労を #かけてしまったとしたら、申し訳ないです。 #お忙しいでしょうし、僕の意見も間違っている可能性大い #にあるでしょうから、その内気が向いたらで結構です。 |
|
>>3601 スナフキン > A3 シングルモードで試してみましたがROでマウントされて > いる状態が変わりません。 シングルユーザモードで起動すれば、Read Only でマウント されているものだと思います。狙いは / のみがマウントされ ている状態にすることで、その後ひとつひとつマウントして みることで、どの部分が壊れているのか原因がわかると考えました。 あとですね、この fstab では LABEL=/home などとファイル システムのラベルを指定しています。わたしの知る限り FreeBSD や Solaris にはこういった機能はないので想像ですが、fstab に ラベルを指定すると、まず全デバイスのラベル名を取得し、 ラベル名が一致したデバイスを mount しようとするのでは ないかと思います。 で、マウントしようとしているデバイスとは異なる場合でも、 ラベル取得時に壊れたファイルシステムが原因でエラーに なるのではないかと想像しました (違うかもしれませんが)。 よって、ラベルを使わず # mount -o rw,remount /dev/hdx /hoge などとデバイス名を指定してマウントしてみてください。 > /usr /var というファイルが存在しますが マウントポイントは最初から必ず存在します。存在するか どうかではなく、その下にファイルがあるかどうか、つまり マウントに成功しているかどうかを教えてください。 > パーティンション情報が間違っている時に rw で書き > 込んで大丈夫でしょうか? 保証はできませんが、大丈夫だと思います。もしファイル システムとして認識できなければマウントできません。また、 /usr を /var に間違えてマウントしたとろで、/var/bin とか /var/sbin とか /var/X11R6 などができてしまう程度 です (当然 umount すれば元通りです)。 ただ、そこでプログラム類が悪さをして /var などの下の ファイルを操作してもらっては困るので、そういう意味でも 「シングルユーザモードで起動」をお勧めします。 |
|
結果から書くと諦めました。 教えてもらった事と、考えられる事を幾つか試してみましたが、 何らかのエラーのオンパレード・・・ remount も試しましたが、その内 / に居るのに /etc の内容が 見えたり完全におかしくなって来ました。 ちなみに、/ の中には、 /boot 空 /home 空 /usr 壊れたファイルの断片を含んだファイル /var 同上 といった内容でした。 (lsコマンドが正常なうちの結果) まともだった頃の、幾つかのコマンド結果を書いてみます。 #fsck /dev/hda2 Couldn't open /proc/partitions: Input/output error Is /proc mounted? # mount /proc mount: non: can't read superblock # fdisk /dev/hda modprobe: modprobe: Can't locate module char-major-27 modprobe: modprobe: Can't locate module char-major-27 Unable to open /dev/hda しかし、ext3 がクラッシュに強いってのは信じられなくなり ました、4年近く使っている古いext2のシステムは、大きなト ラブルも無く今だ健在なのにたった一度の不正終了で・・・。 運が悪いといえばその通りなんでしょうが・・・(涙) お付き合いありがとうございました。 |
|
インストーラーで、前のパーティションを残してインストールする選択 肢が有ったので、/home を残して再インストールしたところ、ラッキー な事にデータを残せたようです。 /etc は全滅なので全て再設定を行う必要が有りますが、一番重要なデ ータが残せた事でよしとします。 また、今回のトラブルでファイルシステムのキーワードを沢山見つけま したが、自分はシステムを作るヒトじゃなく使うヒトなので、あまり 深入りするつもりは有りません。 しかし、バックアップの重要性は友人にあれほど言っている自分が今回 の様なトラブルにあった事でよい戒めとなりました。 ジャーナルシステムを過信するとワタシの様な目に遭いますので、皆さ まご注意を(^^;;;; お騒がせいたしまして申し訳有りませんでしたm(_ _)m |
|
英語と格闘させてしまってるところ、申し訳ないのですが、 暗号技術大全§15.2をご覧ください。 #ごめんなさい。手元にあるのに気が付かなくって。 しかも、Merkle-Hellmanの論文はacmに登録しないと読めない ようなので、僕が一人相撲をとっていたようですね。 #間抜けなことをしでかして、すみません。 |
|
色々と調べたのですが、どうしても分かりません。 以下の機能のスクリプトを作成中です。 1.ユーザーに入力を促し、ユーザーID、パスワードを入力させる。 2.入力されたパスワードの整合性チェック 文字数、英文字数、数字文字数、ユーザーIDと不一致etc. 3.正しいパスワードであった場合、passwdコマンドを実行し該当ユーザーのパスワードを変更。 問題は、上記の「3」です。 ユーザーが入力したパスワードをそのままpasswdコマンドに渡し、パスワード変更を行いたいのですが、入力されたパスワード文字列をpasswdコマンドに渡すことが出来ません。 通常時のpasswdコマンド実行時の様に旧パスワード/新パスワード/新パスワード(再入力)を促さずに、変数として持っているパスワード文字列をpasswdコマンドに渡すことは出来ないでしょうか? 環境はAIX 5.2でシェルは出来ればkshで実現したいと考えています。 |
|
>>3607 バンガード AIX は知りませんが、一般的な UNIX では root 権限があれば 元パスワードを聞かれることはないと思います。 http://publib16.boulder.ibm.com/pseries/Ja_JP/cmds/aixcmds4/passwd.htm ただしプログラムで制御するなら、pwdadm を使った方が よいような気がします。 http://publib16.boulder.ibm.com/pseries/Ja_JP/cmds/aixcmds4/pwdadm.htm passwd は人間が操作することを前提としたコマンドなので。 |
|
>>3607 バンガード passwdコマンドは端末からの入力しか受け付けないため シェルからpasswdコマンドへ直接値を渡すことは出来ません。 expectを使うのが一般的?かなと思います。 (Solaris以外はさっぱりなので参考程度に。) >>3608 68user AIXにはpwdadmというコマンドがあるのですね。 HP-UXのshの話といい、色々と参考になります。 |
|
>>3609 zsh > passwdコマンドは端末からの入力しか受け付けないため > シェルからpasswdコマンドへ直接値を渡すことは出来ません。 UNIX 一般の話であれば、そうでもありません。Linux では % ( echo oldpasswd ; sleep 3 ; \ echo newpasswd ; sleep 3 ; \ echo newpasswd ) | passwd でできました。Solaris8 だと不可でしたが、本当に端末が ない状況 (cron からとか、CGI からとか) でやるとうまく いったりするかも、とか思ったりします。 なぜ sleep が必要かについてはよくわからないんですが、 そのうち Linux の passwd のソースを読んでみよう。 >>3593 へにか 遅くなりましたが、2key-3DES について。お待たせしたわりに 技術的な話ではないんですが…。 http://x68000.startshop.co.jp/~68user/net/crypt-1.html では、 2key-3DES はやめといた方がいいよ。なぜなら、こんな 攻撃方法があって、現時点では (全数探索を除くと) 最も 現実的な攻撃と思われるからでありますよ。 ということを書きたかったのです。よって、これに対して > 確かに2つの鍵を使う3DESは攻撃方法がある、ということも > 書いていますが、どっちかって言いますと、既存の方法、すなわち、 > §2の、Merkle-Hellman Attackの方法よりも、早い方法がありますよ、 という指摘はちょっと意図が図りかねるなぁと思っておりました。 つまり Merkle-Hellman Attack の選択平文攻撃よりも既知 平文攻撃の方が脅威であるため、 「Merkle-Hellman Attack の方は紹介しなくていいかな。 論文も見つからないし」 と思ったわけです。もしこの認識が誤りであればご教示願います。 |
|
>>3610 68user > つまり Merkle-Hellman Attack の選択平文攻撃よりも既知 > 平文攻撃の方が脅威であるため、 > 「Merkle-Hellman Attack の方は紹介しなくていいかな。 > 論文も見つからないし」 当時の僕は論文の意図しか見ておらずこの、「論文も見つからない」 ということ、特に誰でも容易にハイパーリンクを辿ることによって 確認できる方法が無い、というところまで、頭が回っていませんでした。 > と思ったわけです。もしこの認識が誤りであればご教示願います。 いえ、少なくとも現在の僕の認識とは同一です。 #僕の勇み足だったと思います。お詫び申し上げます。 |
|
>>3610 68user バンガードです。 この掲示板を使うのが初めてなので、うまくコメント出来ていなかったら御免なさい。 >UNIX 一般の話であれば、そうでもありません。Linux では > % ( echo oldpasswd ; sleep 3 ; \ > echo newpasswd ; sleep 3 ; \ > echo newpasswd ) | passwd >でできました。Solaris8 だと不可でしたが、本当に端末が >ない状況 (cron からとか、CGI からとか) でやるとうまく >いったりするかも、とか思ったりします。 at コマンドで試してみましたが、残念ながら駄目でした。 引き続きpwdadmについて調査致します。 また、結果を報告させていただきます。 |
|
>>3608 68user >ただしプログラムで制御するなら、pwdadm を使った方が >よいような気がします。 pwdadmについても確認しましたが、残念ながらpasswdと動作は変わらない様です。 (もう少し、細かい設定が出来はしますが) やっぱり、旧/新パスワードを聞いてきて、それぞれの入力が必要であると言う部分では、全く変わりませんでした。 >>3609 zsh expectについては、昨日も調査を致しました。 しかしながら、expectおよびTclの導入が必要ですので、採用を躊躇しています。 |
|
>>3613 バンガード 3608 でも書いたように、root 権限で実行したら 旧パスワードは聞かれないと思いますが、どうですか? |
|
>>3614 68user はい。この件は返事が抜けていましたね。 申し訳ございません。 仰る通り、root権限であれば確かに古いパスワードは聞かれません。 ですが、結局は新パスワードに入力が必要であり、ここでユーザーの介在が必要なことに変わりはありません。 やっぱり、expectを導入するしかないのだろうかと考え始めています。 |
|
>>3615 バンガード > やっぱり、expectを導入するしかないのだろうかと考え始めています。 もし AIX の passwd が、どうしても端末からしか読んでくれないなら、 expect などに頼るか、PAM を使ったパスワード変更プログラムを 書くことになるかと思います。 |
|
LinuxASからsolaris9に乗せ替えるのですが、 クーロンはどのように移行できるのでしょうか? まだ実機が来ていなくて何も環境が見えません。 これまでの設定ファイルやスクリプトファイルが そのまま使えるのか、シェルの変更をしないと使えないのか、 どこに配置するのか・・・少しでも事前に解っていれば助かるかな〜って思ってます。 |
|
>>3617 ビギナー あらーそれは大変ですね。基本的に機能面 (コマンドの数とかオプションの 種類とか) で言うと Linux > Solaris なので (正確には GNU モノ > Solaris)、 Linux から Solaris への移行は結構面倒です。 まずは Sun が提供している 「Linux から Solaris オペレーティング環境への移行」 http://sdc.sun.co.jp/solaris/migration/linux/index.html をどうぞ (ドキュメントを読むにはユーザ登録が必要だと思われます)。 上記ドキュメントには、当然ながら Sun に都合が悪いことはあまり書かれて いませんので (互換性ないですよ、とはあまり書かれていない)、以下わたしの 印象を書きます。 全体的に言えることは、 - Linux (というより GNU) 独自の機能を使っていたら移行に苦労する - 古来からの UNIX の機能しか使っていないならあまり苦労しないかも ということです。GNU モノの一覧はこちらを。 http://www.linux.or.jp/JM/INDEX/gnu.html 特に Solaris の find・date・grep・tar・make・awk・sed コマンドの機能は、 Linux のそれと比べると貧弱な印象があります。 まぁ Solaris でも GNU モノをインストールすることはできるので、 がんばってプログラムを直すか、Solaris に GNU モノを入れるかという 選択肢はありますけどね。 なお、apache や perl など、Linux にも Solaris にも属さないもの (第三者が開発しているもの) は、基本的に同じ動きをします。 > クーロンはどのように移行できるのでしょうか? 基本機能は同じですが、例えば http://www.linux.or.jp/JM/html/cron/man5/crontab.5.html の name=value という書き方は Solaris ではできません。 0-23/2 というのもダメなはず。 上記 man には ATT や BSD の cron では "1-3,7-9" は拒否されるだろう -- "1-3" または "7,8,9" のいずれかだけしか指定できない。 とありますが、Solaris ではどうだったかなぁ。 Solaris の crontab(1) はこちら。 http://www.freebsd.org/cgi/man.cgi?query=crontab&apropos=0&sektion=0&manpath=SunOS+5.9&format=html > 設定ファイル OS の設定ファイル名や内容は、同じものは同じですが、違うものは 違います (としか言いようがない)。 同じもの: /etc/hosts, /etc/resolv.conf, /etc/nsswitch.conf 違うもの: その他たくさん。Linux の /etc/fstab は、Solaris では /etc/vfstab など。 > スクリプトファイル Linux では sh は bash ですが、Solaris は古来からの sh です。例えば Solaris の sh では export A=B はダメで、 A=B export A としなくてはいけません。このような bash 依存な書き方をしていなければ 少しの修正でいけるかもしれませんが、bash の便利な機能を活用しまくって いるなら苦労するでしょう。 |
|
>>3618 68user 参考にさせていただきます。 実機の搬入が来週なので、結果報告はその時にします。 |
|
>>3616 68user 現在expectで対応する方向で準備中です。 ありがとうございました。 |
|
度々申し訳ございません。 今度はkshで教えてください。 ======= test_file ======== aix4-r1 aix4-r2 aix4-r3 aix4-r4 aix3-r1 aix3-r2 aix3-r3 aix3-r4 aix2-r1 aix2-r2 aix2-r3 aix2-r4 ======= test.ksh ======== #!/usr/bin/ksh file="test_file" nawk '{ if ( (substr($0,1,4) == "aix4") )\ {\ printf "TRUE:%s\n",$0; \ }\ else {\ printf "FALSE:%s\n",$0; \ }\ }' $file 上記の様に文字列の先頭数文字のみを見て一致するかの判定を行いたいのですが、ksh単体での実現方法が分からず苦労しています。 やはり、上に示したようにawkを使用して、その中でsubstr関数を使用するしかないでしょうか? 本当に基本的なことで申し訳ございませんが、よろしくお願い致します。 |
|
>>3621 バンガード こんな感じですかね。 while read line; do prefix=${line%-r[0-9]} if [ "$prefix" = "aix4" ]; then echo "TRUE:$line" else echo "FALSE:$line" fi done < test_file |
|
>>3622 68user > prefix=${line%-r[0-9]} > if [ "$prefix" = "aix4" ]; then これだと、私が例で示させていただいたパターンにしか対応できませんよね。(そういう意味では私の示した例が悪かったですね) これを「aix4-r23,aix-r4x3」なども「一致」と見るような方法は無いでしょうか? たとえば、以下のようなif文は無理でしょうか? if [ $line = "aix4"* ]; then |
|
>>3623 バンガード > 「aix4-r23,aix-r4x3」なども「一致」と見るような方法は無いでしょうか? > if [ $line = "aix4"* ]; then aix4* では aix-r4x3 はマッチしないように見えますが、 またしても不適切な例ではありませんか? > if [ $line = "aix4"* ]; then if ではできませんが、case ならできます。 while read line; do case $line in aix4*) echo aix4 ;; aix5*) echo aix5 ;; *) echo others ;; esac done < test_file |
|
>>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で 複数指定はできないのでしょうか(リストというからには複数できるような...)。 |
|
>>3899 jeiu > SSL_CTX_set_cipher_listで複数指定はできないのでしょうか できます。マニュアル読んでますか? >>3880 68user で複数指定する例をあげていますし、さらにそこで > 書き方は OpenSSL のマニュアル ciphers(1) に載っています。 とも書きました。ciphers(1) には The cipher list consists of one or more cipher strings separated by colons. とあります。 なのにこういう質問が出てくるのはなぜですか? |
|
不要かもしれませんが結果報告です。 受け取ったデータを一次ファイルに格納して再読み込みする仕組みだったので、 配列に格納せず他のデータをタブで区切って追加させて、再読み込み時に my($name, $value)=split("\t", $record, 2); と split オプションを追加して、複数のデータを処理させましました。 cgi-lib.pl では \0 で、この掲示板では "," で区切っているので、別の方法を と思いましたが、変更箇所を最小限にするために結局この形にしました。 リファレンスは苦手なんで敬遠してましたが、これをきっかけにまじめに勉強 しようと思います。助言ありがとうございました。 |
|
68user殿 失礼しました。 日本語訳のページをのぞいていました。 「コロンで分離する」と理解しました。 |
|
こんにちは暑中お見舞い申し上げます。 覚えているかどうかは分かりませんが 今から7年前くらいにNETで多大な迷惑を おかけしたものでございます。当時CGIって何ですか? とか言っていた私も今では大手プロバイダでシステム いじってたりします・・・。玉に誰にも聞けない初歩的(?) な事があると、何故か68user様のサイトを参考にしてしまい 頭をすっきりさせているしだいであります。ずっと変わらず 存在しているサイトというのは私にとってとても貴重な物でして 上手く言えなくて申し訳ございませんが どうもありがとうございます。これからも利用させていただきたく存じます。 掲示板の書き込み内容としてそぐわないのは重々承知でございますが 他にコンタクトをかける手段を持ち合わせておりませんもので ご迷惑をおかけいたします。 失礼いたします。ニンニン。 |
|
>>3903 かりり お久しぶりです。お元気そうでなによりです。SEGA BBS で 遊んでたのは 7年も前なんですねぇ。 > CGIって何ですか? は忘れましたが、「タバコを吸って地球温暖化になったらどう するんですか?」と言われて困ってしまったのはよく覚えています。 IT 関連の職につかれましたか。ちなみにわたしは SE なのか プログラマなのかよくわからんのですが、とりあえず Perl や C や Oracle や Pro*C や PL/SQL や Java などと たわむれる 毎日です。 「ここが間違ってる」というご指摘や「もっとここを詳しく説明しろ」 とかいうリクエストがありましたら、遠慮なくどうぞ。 |
|
「UNIX の部屋」 http://X68000.q-e-d.net/~68user/unix/ を更新しました。 |
|
>>3892 じぇぃじぇぃ その後いかがでしょうか。 >>3893 has にも書いたとおり、他の人に聞いてなんとかなったのならそれはそれで まったく構わないのですが、何をどうしたかの報告が欲しいんです。 |
|
HP-UX11.00でPerlでシェルスクリプトを書いています。 Perl4なのですが、Perlでの置換について教えてください。 不等号で囲まれた文字列「<aaa.bbb@test.co.jp>」から 不等号だけを取り除いた文字列を取り出したいのですが 上手くいきません。 -------------- #!/usr/contrib/Q4/bin/perl # $addr="\<aaa.bbb\@test.co.jp\>"; $addr=~ s/<//g; $addr=~ s/>//g; print "$addr\n"; exit 0; ---------- この場合だと、置換処理を2回行わなければなりません。 1回で終わらせたいのですがごうすればよいでしょうか。 -------------- #!/usr/contrib/Q4/bin/perl # $addr="\<aaa.bbb\@test.co.jp\>"; $To=~ s/([^<>]?)+?/$1/g; とか $addr=~ s/^<([^<>]?)+?/$1/g; exit 0; ---------- |
|
>>3907 さいさん > HP-UX11.00でPerlでシェルスクリプトを書いています。 Perl で書いたスクリプトは Perl スクリプトと呼びます。sh や csh などのシェルが解釈するスクリプトがシェルスクリプトです。 > 1回で終わらせたいのですがごうすればよいでしょうか。 perl4 で動くかどうかはわかりませんが、perl5 では以下の どれを使ってもうまくいきました。 $addr =~ s/(^<|>$)//g; $addr =~ s/[<>]//g; $addr =~ s/^<(.*)>$/$1/; $addr =~ s/<(.*)>/$1/; |
|
いつもこのHPにお世話になっている者です。 この6月に会社の社内ネット担当になり、NW1年生になりました。 今はコマンドプロンプトやらTelNetをいじりながら勉強中です。 今日も自宅に戻ってから、 Windows98環境のコマンドプロンプトでパチョパチョ叩いて勉強していました。 画面がスクロールできなく小さいなと思い、 ツールバーの画面最大化ボタンを押してみたら、大変なことに!! 最大化の画面からツールバーが表示できる術を知らず、画面が戻らなくなりました。 EXITで一度ログアウトしてから再立上してみたのですが、 最大画面のままで、、 元の画面に戻すコマンドや、又はコマンド指示以外に元に戻す方法を教えて下さい。 どうぞ宜しくお願い致します。 |
|
Windows には詳しくないので「コマンドプロンプト 最大化 戻す」で 検索したところ、 http://forum.nifty.com/fpcu/top/doslog01/0896.htm > 通常、Alt+Enter(Altキーを押しながらEnterキーを押す)で戻ります。 だそうです。試してみてください。 |
|
alt+enterはコマンドプロンプトというよりも 最大化した状態のアプリケーションを戻すようなイメージで使えます。 |
|
>>3908 68user >> 1回で終わらせたいのですがごうすればよいでしょうか。 >perl4 で動くかどうかはわかりませんが、perl5 では以下の >どれを使ってもうまくいきました。 > $addr =~ s/(^<|>$)//g; > $addr =~ s/[<>]//g; > $addr =~ s/^<(.*)>$/$1/; > $addr =~ s/<(.*)>/$1/; Perl4でも上記のどれを使っても上手くいきました。 |
|
はじめまして 最近、UNIXをさわるようになって、勉強中の身です。 このページでいろいろ勉強させて戴いています。 クーロンの設定で教えて頂きたいのですが、 (1)0 0 * * * /opt/cs/bin/logdel.sh > /dev/null 2>&1 (2)0 0 * * * /opt/cs/bin/logdel.sh > /dev/null (1)と(2)の動作の違いは、なんのなのでしょうか? 標準出力と標準エラー出力の部分を調べたのですが、イマイチ 理解できていません。 こんな質問で申しわけないのですが、ご教授願います。 |
|
はじめまして。 Apacheについて質問といいますが疑問なのですが、mod_sslを使用してssl化した場合 と、そうで無い場合で、Apache(厳密にはブラウザからの表示)が極端に遅くなると 言うことは考えられるでしょうか? 現在はDebian GNU/Linux にてApt-getでインストールしたApacheを使用している のですが、Solarisにソースコードからmod_sslを使用してssl化したApacheを 導入したところ、ローカルからの表示が極端に遅くなりました。(表示に1分以上かかる) Debian GNU/Linuxで使用時と最も違う点はssl化した点と、VirtualHostの数を2つから 4つに増やしたことの2点なのですが、あまりに遅いためお尋ねする次第です。 Solaris側のApacheはSSLを有効にしての起動ではありません。 環境は以下になります。 Debian GNU/Linux(woody)+Apache(apt-getにてインストール) Solaris9_x86+Apache1.3.31+mod_ssl 基本的に両方ともDSOを有効にし、現在は全く同じモジュールをロードして使用して います。httpd.confはVirtualHostの記述、およびSolaris側にはssl関連の記述が ある以外はほぼ同じと思われます。 また、errorlogを確認したのですが、特になにも記述はありませんでした。 何か情報等ございましたらお教えいただきたい次第です。 |
|
はじめまして。。 簡単かもしれませんが是非、識者の方のご助言をお願いします。 AIX4.3.2でlhaコマンドを利用出来るようにしたいのですが 方法を教えて下さい。 AIX4.3.3では利用できるものを見つけたのですが、、、 宜しくお願いします。 |
|
はじめまして。 68user様のPerlでFTPクライアントを作るページを参考にさせていただき、 FTP転送するプログラムを書いたりしています。 その中でFTPコマンドの NLST のレスポンスで 550 が返ってくるかどうかで ファイル存在チェックなどしたりしているのですが、 最近、OSをLinuxのRedHat7JからRedHat9へ変えた所、 FTPサーバが vsftpd-1.1.3-8 になり、NLST の結果が 5 で始まらない結果しか 返って来なくなりました。 Windows2k付属ftpのデバッグモードでサーバレスポンスを見ると次のような感じです。 ftp> ls aaa ---> PORT ###,###,###,###,###,### 200 PORT command successful. Consider using PASV. ---> NLST aaa 150 Here comes the directory listing. 226 Directory send OK. ftp> ※aaaは適当な存在しない適当なファイル名です。 これを見る限り vsftp サーバ側の反応が前と異なるということですよね。 この為ファイルの存在チェックができなくなってしまいました。 私の思いつく対策としては、 1.レスポンスコード(550)で判別ではなく、データポートに入ってくる値で存在チェックに変える。 2.NLST でなく quot SIZE や quot MDTM で判定(この場合 * ワイルドカードが使えなくなります) 3.vsftp のソースから変えてコンパイルする。 (該当個所がみつかるかどうか、変えて他に影響がないかどうかが問題です) 4.wuftp に戻す。 やっぱりワイルドカードは使いたいので4が一番手っ取り早いでしょうか。 サーバ側のconfファイルの設定などで前のNLSTのレスポンスに戻せたら一番いいのですが、 マニュアルを見た感じでは無理そうですし(英語は苦手なので間違いがあるかもしれませんが) サーバのレスポンスが変わってしまった理由や本来はどうあるべきなのかなど なんでもいいですので、この件についてご意見をお聞かせ願いたいと思います。 よろしくお願いします。 |
|
早速ご返答頂きまして、まことに有り難うございます。 実行したところ、最大化した画面が戻りました。 (もう一回実行すると最大化しました。) とても助かりました有り難うございます。 これからも宜しくお願い致します。 -------------------------------------------------------------------------------- No. 3911 # sorame 2004/08/04 (水) 00:56:13 alt+enterはコマンドプロンプトというよりも 最大化した状態のアプリケーションを戻すようなイメージで使えます。 -------------------------------------------------------------------------------- No. 3910 # 68user 2004/08/03 (火) 23:07:49 Windows には詳しくないので「コマンドプロンプト 最大化 戻す」で 検索したところ、 http://forum.nifty.com/fpcu/top/doslog01/0896.htm > 通常、Alt+Enter(Altキーを押しながらEnterキーを押す)で戻ります。 だそうです。試してみてください。 |
|
>>3913 初心者 > (1)0 0 * * * /opt/cs/bin/logdel.sh > /dev/null 2>&1 > (2)0 0 * * * /opt/cs/bin/logdel.sh > /dev/null (1) は標準出力と標準エラー出力を /dev/null に捨てます。 (2) は標準出力だけ /dev/null に捨てます。 cron とからめて考えると、(実装にもよるでしょうが) 標準出力に 出力されたものはメールで通知、標準エラー出力への出力はログに 記録されるので、メールで通知せず、ログにも記録しない場合は (1) がよいでしょう。 なお、> /dev/null 2>&1 は 1>/dev/null 2>&1 と等価であり、 - 2>&1 で 2 (標準エラー出力) を 1 (標準出力) に - 1>/dev/null で 1 (標準出力と標準エラー出力) を /dev/null に と考えるとわかりやすいかもしれません。 >>3914 立神梢一 とりあえず Solaris9_x86+Apache1.3.31 だけで試してみるべきでしょう。 もしそれが遅ければ名前解決が原因かも、などと切り分けられるので。 後は LogLevel や SSLLogLevel を debug にして、どこで止まっているのか 確認してみるのもよいかもしれません。 >>3915 いはら > AIX4.3.2でlhaコマンドを利用出来るようにしたいのですが よくわかりませんが、AIX4.3.3 の lha はどうやって入手したのですか? AIX は知りませんが、フリーソフトのバイナリを配布しているサイトが あるのならそこから入手、なければソースからコンパイルとなるでしょう。 http://www.infor.kanazawa-it.ac.jp/~ishii/lhaunix/ というのがありますが、どの程度信用できるサイトなのかはわかりません。 >>3916 コノテガシワ > FTPサーバが vsftpd-1.1.3-8 になり、NLST の結果が 5 で始まらない結果しか > 返って来なくなりました。 > サーバのレスポンスが変わってしまった理由や本来はどうあるべきなのかなど わかりません。ftp は実装依存部分が多く、どれが正しいのか悩む部分は多いで しょうが、調べてみても明文化された規格が存在しないというケースが多く、 わたしは深く考えないように努めています (世の ftp クライアントの作者の 方々はよくやるよなぁと感心します)。 例えば最近の ProFTPD なぞ NLST のオプションを弾くようになりましたし。 http://www.miloweb.net/pastbbs/0008/2281.html 対処は目的にもよりますが、汎用的なつくりを優先させるなら レスポンスコード (550) で判別し、もしエラーでないならデータポートに 入ってくる値で存在チェックする がよいと思います。自分用のお手軽ツールで、とりあえず動けばいいや的な考えで あれば、それこそ一番お手軽と思う方法がよろしいかと。 |
|
>> 3918 ご返答ありがとうございます。 他のサイトでもFTPクライアントのトラブルも拝見してきました。 どうやらサーバによって NSLT に使えるパラメータやそのレスポンスが違うのは、 RFC に定められた動き以外は FTPD(サーバプログラム)独自の+α機能 ということのようですね。(違っていたらご指摘下さい) だから、クライアントを作る人も応用が利くように 色んなサーバを調べて対応した方が良い物が出来るということですね。 今回の場合、実はあるプロジェクトの開発用のマシンでの話でした。 開発環境だから本番と同じにした方がいいかもしれない・・・ でも、今後のことを考えると新しいOSで新しいFTPサーバでも 対応した存在チェックが出来るようにした方がいいかもしれない・・・ と少し悩んでいました。 今回の場合、それほど汎用的な作りを重視する必要は無いのですが、 自分の技術向上のためにも汎用的な作りにする方向で検討してみます。 ありがとうございました。 |
|
回答ありがとうございました。 > > AIX4.3.2でlhaコマンドを利用出来るようにしたいのですが > よくわかりませんが、AIX4.3.3 の lha はどうやって入手したのですか? レスして頂いた内容のサイトより入手しました。 > AIX は知りませんが、フリーソフトのバイナリを配布しているサイトが > あるのならそこから入手、なければソースからコンパイルとなるでしょう。 > http://www.infor.kanazawa-it.ac.jp/~ishii/lhaunix/ > というのがありますが、どの程度信用できるサイトなのかはわかりません 頑張って捜してみます。 |
|
ご回答ありがとうございました。 >>とりあえず Solaris9_x86+Apache1.3.31 だけで試してみるべきでしょう。 ですよね。 ただ、現在のところどうもDNS関連での名前解決の問題っぽいです。 ローカルではDNSを立てていないため、その辺も関連しているのかなという感じです。 クライアントマシンをサーバーのhostsファイルに記述していないのでそれも無関係で はないかもというところです。 というわけで現在作業中です。解決もしくは問題の切り分けができましたら、 またご報告に参上したいと思います。ありがとうございました。 |
|
はじめまして、少し教えて欲しいのですが、ルータの設定画面などにアクセスする際にポップアップで 表示される認証を自動的に行えないでしょうか?少し古いルータを使ってまして、接続先を自動的に切 り替えるプログラムを作りたいのですが。 |
|
初めまして。質問があります。 僕は掲示板で書き込みをしていたら、まったく同じIPの方がいて、その方にとっても ご迷惑をかけてしまいました。 そこで質問です。 同じIPがあるのって、不可能なんですか?? |
|
初めまして。UNIXのみならず、ネットワークについて色々お世話になってます。 NW内で近いコンピュータと通信するというエニーキャストアドレスが在りますが、 何を以って【近い】というのか解りません。 部の勉強会で、近いとは遅延のことか?と発言したところ、 次回発表に「CSMA/CDのキーワードで、NW内近いというものを発表しろ」と 課題が出されました。 調べたところ、CSMA/CDの他、CSMA/CA、ホットポテトルーティング、近隣探索機能(v6)等々出てきました。 しかし、何を以って近いと言うのか、よく解っていません。 ・NW内で【近い】とは何か? ・CSMA/CD、CSMA/CA、ホットポテトルーティング、近隣探索、がどのような仕組みか? 上記について、参考になる資料やサイトがあれば是非とも教えて下さい。宜しくお願い致します。 |
|
どうも初めまして。ネットワークプログラミング始めたばかりの者です。 ちょっと前までは決まりきったものだと特に気に止めずに流していたのですが、 connect()関数の第2引数が connect(sockfd, (struct sockaddr *)&servaddr, sizeof(servaddr)) というふうに普通していますが、どういう意味なんでしょうか? servaddrのアドレスさえ渡してやればいいように思うのですが。(ん?その前にC言語の 文法がまだ完全に理解できていなのかも?)servaddr構造体のアドレスをsockaddr構造体 のポインタでキャストしてる?なんかよく分かりません。 助言をお願いします。 |
|
>>3922 社長の猿 おそらく BASIC 認証と呼ばれるものだと思いますので、 >>2612 68user を参考にしてください。 >>3923 優 proxy サーバを経由しないと学校や会社の外に出られない環境とか (proxy サーバの IP アドレスは 1つ)、一度 IP アドレスが割り当て られたものの、しばらくアクセスしなかったので他の人に同じ IP アドレスが割り当てられた、という可能性があります。 >>3924 ネットワーク1年生 わたしはネットワークの仕組みはよく知らないのですが、 > CSMA/CDの他、CSMA/CA、ホットポテトルーティング、近隣探索機能(v6) CSMA/CD・CSMA/CA は近いという概念とはまったく関係なく、LAN 内での コリジョンを防止するための仕組みだと思っています。 http://e-words.jp/w/CSMA2FCD.html http://e-words.jp/w/CSMA2FCA.html ホットポテトルーティングはわかりません。Anycast もよくわかりませんが、 どこが違いかどうかはルータが判断するものではないかなぁと思っています (末端のアプリが判断する必要はない)。で、ルータがどういう基準で近さを 判断しているかはわかりません。 >>3925 hex > servaddrのアドレスさえ渡してやればいいように思うのですが 根本的にはその通りです。ただ、connect(2) は struct sockaddr_in の アドレスを受け取ったり (インターネットのアドレスの場合)、struct sockaddr_un のアドレスを受け取ったりしなければいけません (UNIX ドメインのアドレスの場合)。 しかし C 言語ではいろいろな型を受け取る関数を作ることはできないため (Java や C++ のように関数のオーバーロードができないため)、struct sockaddr という汎用的な構造体を定義し、それにキャストすることで connect(2) に struct sockaddr_in も struct sockaddr_un も渡せるようにしています。 まぁ C の言語上の制約を回避するための汚い手ですね。コンパイラに警告を くらってもいいなら、キャストなしでも動くと思います (C++ でなく C を使って いるならば)。 |
|
>>3921 立神梢一 だいぶ時間が空いてしまいましたが、sslをはずしてコンパイルしてみましたが 変化なく、その後名前解決をもう一度見直したところどちらの状態(ssl有り/無し) でも問題ない速度で動作しました。やはり名前解決周りだったようです。 ご報告が遅くなりました。ありがとうございました。 |
|
/etc/passwdファイルからグループIDがゼロになっているユーザを出力する場合、 「grep ':00*:' /etc/passwd」とすると rootだけが以下のような内容で引っかかります。 「root:x:0:1:Super-User:/:sbin/sh」 しかし、何故これがひっかかるのかがわかりません。 grepの条件で「:00*:」としているのに、なぜこれを含んでいないrootの 行がひっかかるのでしょうか?ご存知の方、教えていただけませんでしょうか。 OSはSolaris7を使用しています。 |
|
/etc/passwdファイルからグループIDがゼロになっているユーザを出力する場合、 「grep ':00*:' /etc/passwd」とすると rootだけが以下のような内容で引っかかります。 「root:x:0:1:Super-User:/:sbin/sh」 しかし、何故これがひっかかるのかがわかりません。 grepの条件で「:00*:」としているのに、なぜこれを含んでいないrootの 行がひっかかるのでしょうか?ご存知の方、教えていただけませんでしょうか。 OSはSolaris7を使用しています。 |
|
>>3929 yoshitani > grepの条件で「:00*:」としているのに :00*: は、 コロンがあって、その後に 0 があって、その後に 0個以上の 0 があって、その後にコロンがある という正規表現ですので、 > 「root:x:0:1:Super-User:/:sbin/sh」 の :0: の部分にマッチします。 GID が 0 のものを引っ張りたいなら、 % grep ':[0-9][0-9]*:0:' /etc/passwd % awk -F: '$4~/^0$/ {print}' /etc/passwd などとすればよいかと思います。 |
|
>>3924 ネットワーク1年生 ネットワーク的に近いとは同一ネットワーク内のことを指します。 まぁ、普通ならルーターを挟まない通信と言うこと |
|
>>3930 68user ありがとうございました。 正規表現、もっと勉強してみます。 |
|
はじめて書き込みをさせていただきます。たろーと申します。 OpenSSLで単純なHTTPSクライアントのプログラミングをしているのですが、 SSL_connect(ssl)関数のタイムアウトの設定の仕方がわかりません。 もしご存知でしたら、教えていただけないでしょうか。 宜しくお願いします。 |
|
>>3933 たろー > SSL_connect(ssl)関数のタイムアウトの設定の仕方がわかりません。 関数名しか見てませんが SSL_set_timeout や SSL_CTX_set_timeout じゃ ないですかねぇ。ぜひ結果を教えてください。 |
|
こんばんは。TSURUです。 久しぶりです。 また、皆さんのお力を貸して欲しいと思います。 sendmail を久しぶりにコンパイルしようとしたのですが、 以下のようなメッセージが大量に出力されてしまい、コンパイル できません。 unknown flag -lang-c unknown flag -Asystem(unix) unknown flag -Asystem(svr4) unknown flag -Acpu(sparc) unknown flag -Amachine(sparc) 環境は、以下のとおりです。 OS : Soraris 2.5.1 sendmail : sendmail-8.12.11 以前は問題なくコンパイルできていたのですが、久しぶりに実行したら、いきなり コンパイルできなくなってしまいました。環境は、以前と特に変えていません。 コンパイラは gcc ですが、かなり古いです。 % l /usr/local/bin/gcc -rwxr-xr-x 1 root other 118928 9月 1日 1996年 /usr/local/bin/gcc* コンパイラが古いとコンパイルできなくなるということはあるのでしょうか? ちなみに、sendmail だけでなく、UW-IMAP など他の製品をコンパイルしようとした 時にも、同様な現象となります。 gcc が正しくインストールされていないのが原因なのでしょうか?(だとしても、 以前は正常にコンパイルできていました。) どなたか、解決方法を教えていただきたいと思います。 よろしくお願いします。 |
|
以下のカンマで区切られたデータをフィールド1をキーにして、フィールド3を 1行に編集しようとしたのですが、処理が終了してくれません。 無限ループの状態になってしまいます。 上手くファイルの終了を判断していません。 ファイルの終わり(EOF)を判断するにはどうしたらできますか。 --データ-------------- A001,商品番号,0001 A001,商品番号,0002 A001,商品番号,0003 A002,商品番号,0001 : : Annn,商品番号,0001 Annn,商品番号.0002 --結果-------------------- A001,0001,0002,0003 A002,0001 : : Annn,0001,0002 ---------------------------------- #!/bin/sh # SORT_FILE="/tmp/sort_csv.log" OUT_FILE="/tmp/kekka.log" rm ${OUT_FILE}* > /dev/null 2>&1 echo "*** start ***" awk -v OUT=${OUT_FILE} -F"," ' BEGIN { count = 0+0 ; output=sprintf("%s",OUT) ; } function edit_proc() { cnt = 0+1 ; dumy = $1 ; printf("%s",$1) >> output ; while( NF>0 ) { if (dumy != $1) { printf("\n") >> output ; dumy = $1 ; printf("%s",$1) >> output ; cnt++ ; } printf(",%s",$3) >> output ; getline ; } printf("\n") >> output ; return cnt ; } { count=edit_proc() ; } END { close(output) ; printf("syori count [ %d ] ken\n",count) ; }' ${SORT_FILE} echo "*** end ***" |
|
>>3931 MERCY MERCYさま。ご回答有り難うございます。お礼が遅くなってごめんなさい。 これからもその他、下らないことで質問すると思われますので、 是非とも宜しくお願い致します。 有り難うございました。 |
|
>>3926 68user 管理者さま。大変お世話になっております。 くだらない質問にも、いつも一番にご回答下さり大変嬉しいです。 本当に有り難うございます。 >> CSMA/CDの他、CSMA/CA、ホットポテトルーティング、近隣探索機能(v6) >CSMA/CD・CSMA/CA は近いという概念とはまったく関係なく、LAN 内での >コリジョンを防止するための仕組みだと思っています。 はい。まさにその通りでした。。 課題を出した上司はNWがどの様に通信しているのかを勉強させたく、 CSMA/CD・CSMA/CAの課題を持ち出したものでした。 コリジョン防止がNW内通信の速さだと思っていた先輩が誤って、 「NW内の近さ」と関連付けアドバイスしてくれたものですから混乱してました。 「UNIXと言うものが、サーバ向が主体」とどこかで思っているので、 こちらでNWの質問までしてしまって申し訳けございませんでした。 とにかく本当に有り難うございました! |
|
はじめまして。 よろしくお願いいたします。 現在HP-UX11.00、Bシェルでログの監視ツールを作っています。 早速質問させていただきたいのですが、 たとえば、以下のようなログがあったとします。 ------------------------------------------ 1:I have a error. You have a worning. 2:I have a worning. You have a error. ------------------------------------------ 変数にワイルドカードを使用して ------------------------------------------ pattern="*error*worning*" ------------------------------------------ とパターン定義しておいて、ログファイルを一行ずつ読み込み この場合ですと、一行目のみ出力させるということは可能でしょうか? 現在 ------------------------------------------ message=`echo $line | sed -n /$pattern/p` if [ "x$message" = "x" ] ; then exit 0 else echo $message exit 1 fi #($lineはログファイルの読み取り行) ------------------------------------------ というようなことが、やりたいのですが、うまくいきません。 ご教授のほどお願いいたします。 |
|
>>3936 一人 こんな感じでどうですか? ------ awk 'BEGIN { FS=","; dummy=""; } { if ( $1 != dummy ) { if ( NR > 1 ) printf "\n"; printf "%s,%s",$1,$3; dummy=$1 } else { printf ",%s",$3 } } END { printf "\n"; }' infile ------ >>3939 カトウ pattern='.*error.*worning.*' では駄目ですか? |
|
>>3940 zsh ありがとうございます。 上手くいきました。 こんな簡単な方法でできるのですね。 考えすぎですね。 |
|
>>3935 TSURU > sendmail を久しぶりにコンパイルしようとしたのですが、以下のような > メッセージが大量に出力されてしまい、コンパイルできません。 http://mm.apache.or.jp/pipermail/apache98-99/1999-August/001431.html のスレッドを参考にしてください。 gcc をインストールしなおさないといけないのか、PATH の設定次第で何とか なるものなのかはわかりません。 > コンパイラが古いとコンパイルできなくなるということはあるのでしょうか? あります。しかし今回は環境の問題でしょう。 >>3939 カトウ > message=`echo $line | sed -n /$pattern/p` 質問内容とは関係ありませんが、$line にワイルドカードなどが入っていると シェルが展開してしまうので、ログ内容をシェル変数に格納するやり方はお勧め しません。 |
|
始めまして、こんにちは。 UNIX講習を受けてから5年以上も経つのに、ほとんど初心者です。 基本的な質問ですみません。 tar xvf *.tar で展開して、ファイル情報を表示させたとき、 その内容をファイルに落とすにはどうしたらいいでしょうか? この展開ですべてのファイルがきちんと展開されたか確認したいのです。 (実は1つだけ展開されていない・・・) 本当に、基本的な質問ですみません。 よろしくお願いいたします。 |
|
初めまして。ポチ公と申します。 ネットワークの勉強中ですがちょっと質問があります。 今、httpの仕組みを勉強中でこちらのサイトにたどり着きました。 以下のページで公開されているtcpdump-filter.plで ttp://x68000.q-e-d.net/~68user/net/tcpdump.html 書かれていたとおりに実行して 見事パケットが整形されて表示されました。 以下のようなコマンドです。 tcpdump -l -s 1600 -x -i lo0 | tcpdump-filter.pl | grep http >> packet.txt xxx.com/ HTTP/1.0 Accept: image/gif, image/x-xbitmap, xxx.com/ HTTP/1.0 Accept: image/gif, image/x-xbitmap, xxx.com/ HTTP/1.0 Accept: image/gif, image/x-xbitmap, zation Required ... それで思ったのですが、どうもログを見ると 先頭の3行くらいが全て省略されているようでした。 環境はredhat9/perl5.8です。 何故、先頭の数文字が省略されているのが 疑問でしたので、投稿してみました。 もし何か解りましたら教えて頂けたら幸いです。 宜しくお願いします。 |
|
>>3943 初心者? > tar xvf *.tar > で展開して、ファイル情報を表示させたとき、 > その内容をファイルに落とすにはどうしたらいいでしょうか? tar xvf *.tar > out.txt 2>&1 (sh・bash の場合) tar xvf *.tar >& out.txt (csh・tcsh の場合) とします。ただ、 > この展開ですべてのファイルがきちんと展開されたか確認したいのです。 という目的であれば、 - v オプションをつけない。これで何か出力されれば それはエラーメッセージのはず。 - tar のステータスコード ($? や $status) を確認。 エラーが発生しているならステータスコードが 1 以上のはず。 という手もあります。 >>3944 ポチ公 > それで思ったのですが、どうもログを見ると > 先頭の3行くらいが全て省略されているようでした。 すいません、ちょっと時間と気力不足により、スクリプトの 確認は後日行います。申し訳ないです。 もし正しい出力がほしいなら、tcpdump の -X オプションを 使うとか (Ethernet フレームまで出力されてしまいますが)、 ethereal や ethereal に付属する CUI の tethereal の使用を 検討してみてください。 |
|
「ネットワークプログラミングの基礎知識」の「リンク集・参考書籍」に OpenSSL - 暗号・PKI・SSL/TLS ライブラリの詳細 を追加しました。 http://X68000.q-e-d.net/~68user/net/link-book.html#4274065731 去年頃から、OpenSSL に一番詳しい日本語の解説を書くことを 目指してがんばってきましたが、夢破れました。この本がもっと 前に出ていれば、あんなことやこんなことで悩む必要はなかった のに、と理不尽な怒りすら覚えます。 今後は OpenSSL に一番詳しい日本語のサイトを目指すことにします。 |
|
お初です。 最近このHPにも大変お世話になってます。 組み込みLinuxでクレジットカードリーダーを試作することになり、 PPPでインターネット経由でサーバと通信するって感じです。 手順その他は私に任せられてたので、独自のプロトコルを考えるのが 面倒だし、ゆくゆくはセキュリティーも対策しないといけないので サーバ側をApache+modsslを使うことにしたのですが、このサイトの情報が 非常に参考になりました。クライアントソフトを解説してあるサイトは 非常に少ないので、大変助かります。 SSLサーバ認証なしで、実験ソフトが動作するところまでは行きました!! でも私のカードを使ってインターネット経由ってのは、まだ怖いので、 クライアント認証に挑戦したいと思います。 そんな記事を書かれるご予定はありませんか?(^^; (クライアント側でクライアントの証明書をリストに追加するだけの ような気がしてますが・・・) これからもがんばってください。 |
|
>>3947 だんだん 書く気はありますが、もし書く場合は「クライアント認証とは何か」 から始めるつもりなので、いつ書きあがるかは何ともいえません。 要は SSL_CTX_use_certificate_chain_file() などを使ってクライ アント証明書を使えばいいわけですが、詳しいやり方は >>3946 68user の本に書いてあります。 また、概念からして怪しい場合は、 - 自前で CA (認証局) をたてる - クライアントが CSR (証明書発行要求) を作成する - それを受けて CA が証明書を発行する - IE などのブラウザに証明書を組み込む としてまず理解を深めることをお勧めします (ここらへんの手順は 検索すればたくさん見つかります)。 |
|
はじめまして。 UNIX の部屋 -> コマンド -> cpp にて、 型の別名の定義方法で typedef MYCHAR_P char *; が正しいと紹介されていますが、これは typedef char *MYCHAR_P; の間違いではないでしょうか? |
|
>>3949 T.Kobayashi > typedef char *MYCHAR_P; > の間違いではないでしょうか? ごもっともであります。修正しました。 http://X68000.q-e-d.net/~68user/unix/pickup?cpp ご指摘ありがとうございました。 |
|
はじめまして。 いつもコマンドの参考にさせて貰っております。 説明している数や例がわかりやすくて重宝してます。 大した事ではありませんが、気になった部分を2点ほど ■いずれも【TOP >> UNIX の部屋 >> ジャンル別コマンド一覧 >> vi】にて 1.「h 1文字左に移動」がリストからはみ出ています。 2.「編集モード中に"ESC"」=「編集モードに移行」 であれば、リストに入れてはいかがでしょうか。 リストにあれば、閲覧2度目以降の人はそれだけ参考にすればよいので見やすいかと。 (個人的にですが) |
|
はじめまして。 ソケット通信について教えてください。 Severプログラムでクライアントから ConnectしてきたクライアントがClose処理を行ったかわかりますでしょうか? Connect時は、接続元のIPアドレス・ポートがわかると思いますが クライアントがCloseを行ったかどうかを知りたいのですが? よろしく御願いいたします。 |
|
>>3951 ほんたか ご意見ありがとうございます。 > 1.「h 1文字左に移動」がリストからはみ出ています。 これは HTML 生成スクリプトの不具合で、認識しているの ですが、美しい直し方はないかなぁと考えているところです。 いましばらくお待ちください。 > 2.「編集モード中に"ESC"」=「編集モードに移行」 > であれば、リストに入れてはいかがでしょうか。 ごもっともです。そのように修正しました。 http://X68000.q-e-d.net/~68user/unix/pickup?vi >>3952 shima > ConnectしてきたクライアントがClose処理を行ったかわかりますでしょうか? 簡単に言うと (shutdown の存在を除外して言うと)、サーバが read してクライアントから 0 か SIGPIPE が返ってこれば、 クライアントが close を行ったか、クライアントプログラムが 終了した (close or exit or core dump) ということです。 ただしクライアントのマシンが落ちたり、ネットワークケーブルが 切断された場合は… read が ETIMEOUT を返すんでしたっけ? この辺 あやふやなので、間違ってたらご指摘ください>誰となく |
|
初めまして、 ここのサイトの主旨にあった質問かどうかわからないのですが、 質問させて頂きます。 今、開発作業を以下の構成で実施しているのですが、 Webサーバ:Netscape-Enterprise/3.6 SP3 ブラウザ:Internet Explorer 5.5 SP2 Internet Explorer 6.0 言語:Server Side JavaScript(Livewire) ※サーバ側で動作するJavaScript言語です。 正常にHTML画面が表示されているのに、 パケットの最後に、"400 Bad Request"が入ってしまい、 次の画面で、 "あなたのブラウザがサーバに送ったリクエストはサーバが理解できないリクエストです" のエラー画面が表示されてしまいます。 この現象は必ず発生するわけではなく、 2人のひとが同時に同じ作業をした場合にも、 片方の人は発生し、もう片方の人には発生しないことがあります。 (パケットの例) : </HTML> HTTP/1.1 400 Bad Request Server: Netscape-Enterprise/3.6 SP3 ............ ただ、この問題は Netscape Navigater Ver7.1 では発生せず、 また IE の設定を、 「HTTP 1.1を使用する」 → 「HTTP 1.1を使用しない」 に変更するとこちらも問題が発生しなくなります。 そして、telnet を使用しリクエストした場合には、 必ずこの形(Bad Request)で出力されています。 プロトコルかNetscapeサーバが原因と考えているのですが、 うまく問題を切り分けることができません。 わかるかたがいましたら、すみませんがご教授願います。 |
|
> 3948 . 68user > 要は SSL_CTX_use_certificate_chain_file() などを使ってクライ > アント証明書を使えばいいわけですが、詳しいやり方は あっさり動作しました。 ご指摘ありがとうございます。 |
|
>>3954 則巻せんべい そういう事象は知らないので何とも言えませんが、とりあえず ethereal などで IE5.5 と NN7.1 のそれぞれのリクエストと レスポンスを観察してみることをお勧めします。 |
|
お久しぶりです。 その節はお世話になりました。 現在、再びSSLの改造に着手しています。 OpenSSLを使用してクライアントからサーバに HTTP KEEP ALIVE(パーシステントコネクション)を行いたいのですが、 上手く行きません。 HTTPリクエスト時に Getで最初と異なるHTMLファイルを指定し、 Connection: Keep-Alive を要求した後に、 SSL_read()をしても異なるHTMLファイル を読み込む事ができません。 ちなみに、平文のhttpでは読み込む事が出来たのですが、 この辺りの情報が皆無に近くて苦労しています。 OpenSSLの場合は何か特別な事を行なわないと実装できないのでしょうか? 参考URLや書籍など、ご存知な方が居られましたら ご教授下さい。 |
|
>>3957 ニッタン > OpenSSLの場合は何か特別な事を行なわないと実装できないのでしょうか? 特にないと思っています。 https://www.rsasecurity.com/ と https://www.rsasecurity.com/solutionsPrimary.asp を keep-alive で読むサンプルを http://x68000.q-e-d.net/~68user/tmp/https-client-keep-alive.c に置きました。 このサンプルではレスポンスに </html> が含まれていればレスポンスの 受信が完了したものとみなして次のリクエストを送信する、という手抜き処理を していますが、本来は Content-Length の値などを見るべきです。 |
|
バンガードです。 以下の機能の実現方法が分からず困っています。 --------- rep_file ------------ $SERVER1 $SERVER2 $SERVER3 ------------------------------- 上記のファイルが存在する状態で、以下の定義を行います。 ------------------------------- SERVER1="server01" SERVER2="server02" SERVER3="server03" ------------------------------- この状態で、rep_fileを読み込み各行が表す変数の中身(server01,server02,server03) を表示させたい。 以下のスクリプトを組んで見ましたが、 -------------------------------- while read REP do echo \$$REP done < $REP_LIST -------------------------------- 結果は以下の通りでした。 -------------------------------- $SERVER1 $SERVER2 $SERVER3 -------------------------------- 環境はAIX5.2です。 出来れば、kshで実現したいと考えています。 |
|
>>3959 バンガード > echo \$$REP eval "echo $REP" としてみてください。 |
|
>>3960 68user >eval "echo $REP" としてみてください。 うまく行きました。 ありがとうございました。 |
|
はじめまして。最近Unix系OSをいじりはじめたものです。 このサイトのおかげですごい助かってるぜーと隣の人間に話していたら、 そういうのは掲示板に書き込んだほうが管理者の人が元気になるよー、と 教えてもらったので、感謝報告書き込みさせてください。 これからもリファレンスのお世話になりそうなのでまた利用させて下さい。 お邪魔しましたm(__)m |
|
>>3956 68user ご指摘、ありがとうございます。 教授の内容を試行させて頂きます。 |
|
初めまして。 最近C言語でCGIプログラミングを始めました。 そこで、crypt関数によるMD5暗号化を行う(掲示板のため、所謂トリップのため)ことにしたのですが、 #include <stdio.h> #include <unistd.h> int main(void) { char *salt = "Salt"; char *pass = "pass"; printf("Content-type:text/html\n\n"); crypt_set_format("des"); printf("DES: %s\n", crypt(pass, salt)); crypt_set_format("md5"); printf("MD5: %s\n", crypt(pass, salt)); crypt_set_format("blf"); printf("Blowfish: %s\n", crypt(pass, salt)); return 0; } というソースを見つけたので、動作確認のためgcc3.2、Kernel2.6.5のFedoraCore2ディストリ環境でコンパイルしてみました。 しかし、[-lcrypt]オプションを指定しても解決していない旨のエラーメッセージが表示され、コンパイルできません。 配布も予定しているものなので、httpdを直接書き換える設定は不可能なので、どのようにMD5に指定したらよいか、何方かご教授をお願いします。 |
|
>>3962 タコ見習 ありがとうございます。間違いやわかりにくい表現などありましたら、 ぜひご指摘ください。 >>3964 侍刀 > というソースを見つけたので、動作確認のためgcc3.2、 > Kernel2.6.5のFedoraCore2ディストリ環境でコンパイル > してみました。 http://www.jp.freebsd.org/QandA/HTML/1944.html でしょうか。 この crypt(3) の動作を切り替える仕組みは、わたしの知る限り FreeBSD のみに実装されています。Linux にこういう仕組みがあるかどうかはわかり ません (もしあったとしてもインタフェースは異なる可能性が高いと思われます)。 OpenSSL 必須でよいなら、EVP_Digest* などの仕組みを使うのがよいでしょう。 それがダメなら、*BSD や RFC1321 のソースを同梱して配布することをお勧め します (md5 のソースはそれほど長くないので)。 |
|
>>3965 68user あ、あらららら・・・・・・・そうだったんですか・・・・・ Linux互換じゃないとは知りませんでした・・・・・・ では、RFC1321のソースでも探して見ます・・・・ |
|
HP-UX11.00なのですが、telnetやrlogin、remshなどで、リモートログイン してくるあるユーザ(一般ユーザ)をログインできないようアクセスの拒否 をしたいのですが、実現可能なのでしょうか。 状況としては、UNIX同士、PCからUNIXとあり、同一LAN上にあります。 ftpのアクセス拒否と同じように定義ファイルがあり、ユーザ名を記述 すればアクセス拒否ができるのかと調べてはみたのですが、該当する ようなファイルはなく、実際にはどうなのでしょうか。 |
|
>>3967 でぶ > telnetやrlogin、remshなどで、リモートログインしてくるある > ユーザ(一般ユーザ)をログインできないようアクセスの拒否 > をしたい 以下のような案でどうでしょうか。 - telnetd や remshd を止める (全ユーザが利用不可) - そのユーザのパスワードやログインシェルを変更する (su にも有効。実装によるかもしれないが ftp が使えなくなるかも) - .login や .profile に logout と書いておく (タイミングよく Ctrl-c を押せばよいので気休め程度。su には効かない) |
|
UNIX上のC言語でCGIを作っています、複数のデータを画面に表示する。 沢山データあるので、改ページの機能もあります 1つ悩みがあります。 ページを変わると、タイトルの表示位置も変えてしまう。 タイトルはTPLファイルで定義しています、以下のように <HR width=98%> <TABLE width=98% cellpadding="2" cellspacing="0" border="0"> <TR> <TH width="30">選択</TH> <TH width="170">サービス名</TH> <TH width="170">グループ名</TH> <TH width="170">コンテンツ<BR>タイトル名</TH> <TH width="170">コンテンツ<BR>ファイル名</TH> <TH width="100">ファイル<BR>サイズ<BR>(byte)</TH> <TH width="50">更新日時</TH> <TH width="58">無償フラグ</TH> </TR> データ出力はC言語で書いています、以下のように printf("<TR bgcolor=%s><TD align=\"center\" width=\"30\">",html_work2); printf("<INPUT type=\"radio\" name=\"CONTENT_ID\" %s value=\"%s%s%s\">\n",html_work1,recode.my_content_id.arr,recode.my_service_id,recode.my_group_id); printf("</TD><TD width=\"170\">%s</TD><TD width=\"170\">%s</TD><TD width=\"170\">%s</TD><TD width=\"170\">%s</TD><TD width=\"100\">%s</TD><TD width=\"53\">%s</TD><TD width=\"58\">%s</TD>\n", service_name, group_name, recode.my_content_title.arr, recode.my_content_filename.arr, recode.my_file_size, recode.my_update_date.arr, html_work3); widthは%の形で定義して見た、それでもページを変わると、タイトルの表示位置をずれてしまう。 誰か教えていただけないでしょうか? |
|
>>3969 田 CGI が出力した HTML のソースを参照し (IE なら「表示->ソース」)、 以下の HTML と比較して、おかしいところはないか調べてみて下さい (例えば </TR> が抜けていないか、など)。 <HTML><BODY> <HR width="98%"> <TABLE width="98%" cellpadding="2" cellspacing="0" border="0"> <TR> <TH width="30">選択</TH> <TH width="170">サービス名</TH> <TH width="170">グループ名</TH> <TH width="170">コンテンツ<BR>タイトル名</TH> <TH width="170">コンテンツ<BR>ファイル名</TH> <TH width="100">ファイル<BR>サイズ<BR>(byte)</TH> <TH width="50">更新日時</TH> <TH width="58">無償フラグ</TH> </TR> <TR> <TD align="center" width="30"> <INPUT type="radio" name="CONTENT_ID" value="xxx"> </TD> <TD width="170">a</TD> <TD width="170">b</TD> <TD width="170">c</TD> <TD width="170">d</TD> <TD width="100">e</TD> <TD width="53">f</TD> <TD width="58">g</TD> </TR> <TR> <TD align="center" width="30"> <INPUT type="radio" name="CONTENT_ID" value="xxx"> </TD> <TD width="170">A</TD> <TD width="170">B</TD> <TD width="170">C</TD> <TD width="170">D</TD> <TD width="100">E</TD> <TD width="53">F</TD> <TD width="58">G</TD> </TR> </TABLE></BODY></HTML> |
|
こんにちは。 今あるプログラムの不具合調査をしておりまして、 RAND_add() がキーとなった不具合が発生しております。 とても情けない質問になるのですが、 RAND_add とは何を行っている関数なのでしょうか。 |
|
68USER様:貴重な提案をいただきました、ありがとうございます。 試して見ましたが、問題解決まだできません |
|
<HTML> <HEAD> <TITLE>・ウ・鵐ニ・鵐トク。コ�掘�フイ靂フ</TITLE> <META http-equiv="Content-Style-Type" content="text/css"> <META http-equiv="Content-Script-Type" content="text/javascript"> <Script Language = "JavaScript" SRC="./js-lib/comfunc.js"></Script> <Script language ="JavaScript"> <!-- function disp(){ parent.buttonFrame.location="Pscc_content_infobutton.cgi"; } //--> </SCRIPT> </HEAD> <BODY bgcolor="#FFFFFF"> <CENTER> <IMG src="../images/title_contentsSearch.gif" width="175" height="27"> <FORM NAME="CONTSHOW" METHOD="POST" ACTION="Pscc_content_infobody.cgi" TARGET="_self"> <HR width=98%> <TABLE width=98% cellpadding="2" cellspacing="0" border="0"> <TR> <TH width="30">チェツ・/TH> <TH width="170">・オ。シ・モ・ケフセ</TH> <TH width="170">・ー・・シ・ラフセ</TH> <TH width="170">・ウ・鵐ニ・鵐ト<BR>・ソ・、・ネ・・セ</TH> <TH width="170">・ウ・鵐ニ・鵐ト<BR>・ユ・。・、・・セ</TH> <TH width="100">・ユ・。・、・・BR>・オ・、・コ<BR>(byte)</TH> <TH width="50">ケケソキニ・�</TH> <TH width="58">フオス�・ユ・鬣ー</TH> </TR> <TR bgcolor=#FFCC99><TD align="center" width="30"><INPUT type="radio" name="CONTENT_ID" checked value="0000100050001"> </TD><TD width="170"> </TD><TD width="170"> </TD><TD width="170">premium</TD><TD width="170">ez.amc</TD><TD width="100"> 67,269 </TD><TD width="53">2023/10/03 00:00:00</TD><TD width="58">、ハ、キ</TD> </TR> <TR bgcolor= ><TD align="center" width="30"><INPUT type="radio" name="CONTENT_ID" value="0000100060001"> </TD><TD width="170"> </TD><TD width="170"> </TD><TD width="170">abc</TD><TD width="170">ez.amc</TD><TD width="100"> 67,269 </TD><TD width="53">2024/08/04 00:00:00</TD><TD width="58">、ハ、キ</TD> </TR> <TR bgcolor=#FFCC99><TD align="center" width="30"><INPUT type="radio" name="CONTENT_ID" value="0000100070001"> </TD><TD width="170"> </TD><TD width="170"> </TD><TD width="170">ST_KC_EZ。ハ」ナ」レ・爍シ・モ。シ。ヒ</TD><TD width="170">ez.amc</TD><TD width="100"> 67,269 </TD><TD width="53">2019/08/04 00:00:00</TD><TD width="58">、ハ、キ</TD> </TR> <TR bgcolor= ><TD align="center" width="30"><INPUT type="radio" name="CONTENT_ID" value="0000100110001"> </TD><TD width="170"> </TD><TD width="170"> </TD><TD width="170">ST_PRE_EZ。ハ」ナ」レ・爍シ・モ。シ。ヒ</TD><TD width="170">ez.amc</TD><TD width="100"> 67,269 </TD><TD width="53">2013/11/03 00:00:00</TD><TD width="58">、ハ、キ</TD> </TR> <TR bgcolor=#FFCC99><TD align="center" width="30"><INPUT type="radio" name="CONTENT_ID" value="0000100170001"> </TD><TD width="170"> </TD><TD width="170"> </TD><TD width="170">ST_MUSYO_EZ。ハEZ・爍シ・モ。シ。ヒ</TD><TD width="170">ez.amc</TD><TD width="100"> 67,269 </TD><TD width="53">2015/11/03 00:00:00</TD><TD width="58">、ハ、キ</TD> </TR> <input type="hidden" name="TOTAL_PAGE" value ="2"> <input type="hidden" name="SERVICE_ID" value =""> <input type="hidden" name="GROUP_ID" value =""> <input type="hidden" name="CON_TITLE" value =""> <input type="hidden" name="CON_FILE" value =""> <input type="hidden" name="DATA_TYPE" value =""> <input type="hidden" name="CUR_PAGE" value ="2"> <input type="hidden" name="CONTENT_ID" value =""> <input type="hidden" name="MOTO" value ="S"> <Script Language = "JavaScript" SRC="./js-lib/comfunc.js"></Script> <Script language ="JavaScript"> <!-- disp() //--> </SCRIPT> </TABLE><BR> </FORM></CENTER></BODY></HTML> |
|
ソース表示するとき、文字化けになった、設定の仕方がわからなくて、そのまま下に貼ります |
|
>>3973 田 文字化け部分を適当に直して IE6 で見てみましたが、特にテーブル構成が崩れることは ありませんでした。ブラウザ名とバージョンを確認してください。また、3973 で提示した HTML をファイルに保存し、そのファイルをブラウザで開き、本当にテーブル構成が崩れる かどうかを確認してください。 >>3971 吉 まず http://X68000.q-e-d.net/~68user/net/ssl-1.html を読んで、RAND_seed() が「PRNG に乱数の種となるランダムデータを蓄積するためのもの」 であることを理解してください。 RAND_seed() は 「10 バイトのデータを乱数の種として蓄積」 ということしかできません。 しかし RAND_add() は 「10 バイトのデータを乱数の種として蓄積するが、本当にランダムな部分は 5バイト分しかない」 などと、ランダムさを指定することができます。それ以外に RAND_seed() と RAND_add() の 違いはありません。 |
|
68user様:貴重な助言、ありがとうございます。 いま私は使っているブラウザ名とバージョンは ブラウザ:Microsoft Internet Explorer バージョン:4.0 (compatible; MSIE 6.0; Windows NT 5.0) です、 3973 で提示した HTML をファイルに保存し、そのファイルをブラウザで開き、本当にテーブル構成が崩れる かどうかを確認しました。文字化け以外、異常がありませんでした |
|
>>3976 田 > ブラウザ:Microsoft Internet Explorer > バージョン:4.0 (compatible; MSIE 6.0; Windows NT 5.0) これは IE6 のことを指します。ブラウザのメニューバーの ヘルプ->バージョン情報 で確認するのが確実です。 > 3973 で提示した > HTML をファイルに保存し、そのファイルをブラウザで開き、本当にテーブル構成が崩れる > かどうかを確認しました。文字化け以外、異常がありませんでした そもそも >>3973 で提示した HTML は、実際に表示が崩れている HTML の ソースを表示した結果ですか? 表示が崩れていない HTML のソースであれば、当然ながら HTML を見ても原因は わかりません。 表示が崩れている HTML のソースであれば、Javascript が悪さをしているのかも しれませんが、現物がないことには何ともいえません。少しずつ出力するタグを 削っていき、原因がどこにあるのか調べましょう。 |
|
AIXでのcsh実行でよく分からない点があり、初めて投稿させて頂きました。 AIX5.2で以下のcshを実行するとエラーは起きません。 #!/bin/csh if ( '07' >= '01' ) then endif exit しかし、if文内の'07'を'08'or'09'にすると 「if:数値の形式が正しくありません.」 とエラーになります。 ('10'や'11'などでは問題ありません。) HP-UXではエラーにならないのですが、理由がお分かりになる方が いらっしゃったら御教えください。 |
|
>>3978 もの知らず? おそらく、>= は両辺を数値として比較するため、0 から始まる文字列は 8進数と解釈されてしまうのでしょう。 もし /bin/test が存在するなら test '07' -ge '01' if ( $status == 0 ) then 処理 endif とか test '07' -ge '01' && 処理 などとする手があります。 |
|
>>3979 68user 68userさん。早速の御解答有難う御座いました。 8進数として解釈され、8進数に09などという数値が 存在しないのでエラーとなったということですね。 大変勉強になりました。 |
|
はじめまして。 ネットワークプログラミングのことを検索すると、いつもこちらのページがヒットするので、 いろいろと勉強させていただいてます。 さて、↓の UDP の説明ですが、 http://x68000.q-e-d.net/~68user/net/udp-2.html クライアントプログラムのリンクはあるのに、サーバの方がない(?)ようです。 で、もしかしたらと思って↓この URL を開いてみたら当たりました(笑)。 http://x68000.q-e-d.net/~68user/net/sample/udp-server-1.pl なので、こちらの方も本文からのリンクがあるとわかりやすいかなと思います。 |
|
>>3981 とおる。 リンクの張り忘れですので、さっそくリンクを追加いたしました。 ご指摘ありがとうございました。 |
|
68user様:貴重な助言、ありがとうございます。 最近手は回らなくて、返事を遅れて、すみません。 いま私は使っているブラウザ名とバージョンは ブラウザ:Microsoft Internet Explorer Version:6.0.2800.1106 データと関連しているような気がします、4ページから5ページ遷移するとき、問題ない、5ページから6ページ遷移するとき問題が起きる 以下は5ページ表示しているときのソース <HTML> <HEAD> <TITLE>・ウ・鵐ニ・鵐トク。コ�掘�フイ靂フ</TITLE> <META http-equiv="Content-Style-Type" content="text/css"> <META http-equiv="Content-Script-Type" content="text/javascript"> <Script Language = "JavaScript" SRC="./js-lib/comfunc.js"></Script> <Script language ="JavaScript"> <!-- function disp(){ parent.buttonFrame.location="Pscc_content_infobutton.cgi"; return true; } //--> </SCRIPT> </HEAD> <BODY bgcolor="#FFFFFF" text="#000000" Onload="return disp()"> <CENTER> <IMG src="../images/title_contentsSearch.gif" width="175" height="27"> <FORM NAME="CONTSHOW" METHOD="POST" ACTION="Pscc_content_infobody.cgi" TARGET="_self"> <HR width=98%> <TABLE width=98% cellpadding="2" cellspacing="0" border="0"> <TR> <TH width=3%>チェツ・/TH> <TH width="14%">・オ。シ・モ・ケフセ</TH> <TH width="14%">・ー・・シ・ラフセ</TH> <TH width="14%">・ウ・鵐ニ・鵐ト<BR>・ソ・、・ネ・・セ</TH> <TH width="14%">・ウ・鵐ニ・鵐ト<BR>・ユ・。・、・・セ</TH> <TH width="13%">・ユ・。・、・・BR>・オ・、・コ<BR>(byte)</TH> <TH width="13%">ケケソキニ・�</TH> <TH width="8%"> <CENTER> フオス�<BR>・ユ・鬣ー </CENTER> </TH> </TR> <TR bgcolor=#FFCC99><TD align="center" width="3%"><INPUT type="radio" name="CONTENT_ID" checked value="0000909630002"> </TD><TD width="14%">フ�掘� </TD><TD width="14%">baseballgrpdir2 </TD><TD width="14%">base2-9 </TD><TD width="14%">cameratuika.gif </TD><TD width="13%"> 1,794 </TD><TD width="13%">2004/09/16 11:36:11 </TD><TD width="8%">、ハ、キ</TD> <TR bgcolor= ><TD align="center" width="3%"><INPUT type="radio" name="CONTENT_ID" value="0000810110001"> </TD><TD width="14%">00001 </TD><TD width="14%">00001 </TD><TD width="14%">8 </TD><TD width="14%">cameratuika.gif </TD><TD width="13%"> 1,794 </TD><TD width="13%">2004/10/05 19:01:42 </TD><TD width="8%">、ハ、キ</TD> <TR bgcolor=#FFCC99><TD align="center" width="3%"><INPUT type="radio" name="CONTENT_ID" value="0001009630002"> </TD><TD width="14%">フ�掘� </TD><TD width="14%">baseballgrpdir2 </TD><TD width="14%">base2-10 </TD><TD width="14%">cancel.gif </TD><TD width="13%"> 1,529 </TD><TD width="13%">2004/09/16 11:36:23 </TD><TD width="8%">、ハ、キ</TD> <TR bgcolor= ><TD align="center" width="3%"><INPUT type="radio" name="CONTENT_ID" value="0000910110001"> </TD><TD width="14%">00001 </TD><TD width="14%">00001 </TD><TD width="14%">9 </TD><TD width="14%">cancel.gif </TD><TD width="13%"> 1,529 </TD><TD width="13%">2004/10/05 19:02:18 </TD><TD width="8%">、ハ、キ</TD> <TR bgcolor=#FFCC99><TD align="center" width="3%"><INPUT type="radio" name="CONTENT_ID" value="0000106410001"> </TD><TD width="14%">aaaa </TD><TD width="14%">aaaa </TD><TD width="14%">aaaa </TD><TD width="14%">chekouttest.txt </TD><TD width="13%"> 41 </TD><TD width="13%">2004/05/14 13:32:57 </TD><TD width="8%">、ハ、キ</TD> <TR bgcolor= ><TD align="center" width="3%"><INPUT type="radio" name="CONTENT_ID" value="0000509630002"> </TD><TD width="14%">フ�掘� </TD><TD width="14%">baseballgrpdir2 </TD><TD width="14%">base2-5 </TD><TD width="14%">close_new.gif </TD><TD width="13%"> 1,351 </TD><TD width="13%">2004/09/16 11:35:17 </TD><TD width="8%">、ハ、キ</TD> <TR bgcolor=#FFCC99><TD align="center" width="3%"><INPUT type="radio" name="CONTENT_ID" value="0001010110001"> </TD><TD width="14%">00001 </TD><TD width="14%">00001 </TD><TD width="14%">10 </TD><TD width="14%">close_new.gif </TD><TD width="13%"> 1,351 </TD><TD width="13%">2004/10/05 19:02:33 </TD><TD width="8%">、ハ、キ</TD> <TR bgcolor= ><TD align="center" width="3%"><INPUT type="radio" name="CONTENT_ID" value="0001308020001"> </TD><TD width="14%">EZ・爍シ・モ。シ </TD><TD width="14%">ez_grp </TD><TD width="14%">sdfafasaasd </TD><TD width="14%">config.gif </TD><TD width="13%"> 1,163 </TD><TD width="13%">2004/08/24 18:37:39 </TD><TD width="8%">、ハ、キ</TD> <TR bgcolor=#FFCC99><TD align="center" width="3%"><INPUT type="radio" name="CONTENT_ID" value="0001908020001"> </TD><TD width="14%">EZ・爍シ・モ。シ </TD><TD width="14%">ez_grp </TD><TD width="14%">syu_test </TD><TD width="14%">contract_change.gif </TD><TD width="13%"> 1,175 </TD><TD width="13%">2004/09/14 17:17:44 </TD><TD width="8%">、ハ、キ</TD> <TR bgcolor= ><TD align="center" width="3%"><INPUT type="radio" name="CONTENT_ID" value="0000300020001"> </TD><TD width="14%">test </TD><TD width="14%">test </TD><TD width="14%">sdsa </TD><TD width="14%">dec.amc </TD><TD width="13%"> 130,749 </TD><TD width="13%">2003/12/12 12:26:18 </TD><TD width="8%">、ハ、キ</TD> <input type="hidden" name="TOTAL_PAGE" value ="28"> <input type="hidden" name="MOTO" value ="S"> <input type="hidden" name="SERVICE_ID" value =""> <input type="hidden" name="GROUP_ID" value =""> <input type="hidden" name="CON_TITLE" value =""> <input type="hidden" name="CON_FILE" value =""> <input type="hidden" name="DATA_TYPE" value =""> <input type="hidden" name="CUR_PAGE" value ="5"> </TABLE><BR> </FORM></CENTER></BODY></HTML> 以下は6ページ表示しているときのソース <HTML> <HEAD> <TITLE>・ウ・鵐ニ・鵐トク。コ�掘�フイ靂フ</TITLE> <META http-equiv="Content-Style-Type" content="text/css"> <META http-equiv="Content-Script-Type" content="text/javascript"> <Script Language = "JavaScript" SRC="./js-lib/comfunc.js"></Script> <Script language ="JavaScript"> <!-- function disp(){ parent.buttonFrame.location="Pscc_content_infobutton.cgi"; return true; } //--> </SCRIPT> </HEAD> <BODY bgcolor="#FFFFFF" text="#000000" Onload="return disp()"> <CENTER> <IMG src="../images/title_contentsSearch.gif" width="175" height="27"> <FORM NAME="CONTSHOW" METHOD="POST" ACTION="Pscc_content_infobody.cgi" TARGET="_self"> <HR width=98%> <TABLE width=98% cellpadding="2" cellspacing="0" border="0"> <TR> <TH width=3%>チェツ・/TH> <TH width="14%">・オ。シ・モ・ケフセ</TH> <TH width="14%">・ー・・シ・ラフセ</TH> <TH width="14%">・ウ・鵐ニ・鵐ト<BR>・ソ・、・ネ・・セ</TH> <TH width="14%">・ウ・鵐ニ・鵐ト<BR>・ユ・。・、・・セ</TH> <TH width="13%">・ユ・。・、・・BR>・オ・、・コ<BR>(byte)</TH> <TH width="13%">ケケソキニ・�</TH> <TH width="8%"> <CENTER> フオス�<BR>・ユ・鬣ー </CENTER> </TH> </TR> <TR bgcolor=#FFCC99><TD align="center" width="3%"><INPUT type="radio" name="CONTENT_ID" checked value="0000409510001"> </TD><TD width="14%">・ウ・鵐ニ・鵐ト・ニ・ケ・ネ(」ナ」レ・爍シ・モ。シ) </TD><TD width="14%">content_ezmovie_grp </TD><TD width="14%">02.3.14-005-6_title </TD><TD width="14%">dlcsv.gif </TD><TD width="13%"> 1,483 </TD><TD width="13%">2004/09/02 20:45:25 </TD><TD width="8%">、ハ、キ</TD> <TR bgcolor= ><TD align="center" width="3%"><INPUT type="radio" name="CONTENT_ID" value="0000509510001"> </TD><TD width="14%">・ウ・鵐ニ・鵐ト・ニ・ケ・ネ(」ナ」レ・爍シ・モ。シ) </TD><TD width="14%">content_ezmovie_grp </TD><TD width="14%">2.3.14-007_title </TD><TD width="14%">dllimit.gif </TD><TD width="13%"> 1,410 </TD><TD width="13%">2004/08/31 14:07:51 </TD><TD width="8%">、「、・/TD> <TR bgcolor=#FFCC99><TD align="center" width="3%"><INPUT type="radio" name="CONTENT_ID" value="0001509510001"> </TD><TD width="14%">・ウ・鵐ニ・鵐ト・ニ・ケ・ネ(」ナ」レ・爍シ・モ。シ) </TD><TD width="14%">content_ezmovie_grp </TD><TD width="14%">0902_title </TD><TD width="14%">dummy.html </TD><TD width="13%"> 53 </TD><TD width="13%">2004/09/02 20:47:46 </TD><TD width="8%">、ハ、キ</TD> <TR bgcolor= ><TD align="center" width="3%"><INPUT type="radio" name="CONTENT_ID" value="0000109780002"> </TD><TD width="14%">grp_test </TD><TD width="14%">grp_test </TD><TD width="14%">grp_test </TD><TD width="14%">dummy.html </TD><TD width="13%"> 53 </TD><TD width="13%">2004/09/16 13:43:11 </TD><TD width="8%">、ハ、キ</TD> <TR bgcolor=#FFCC99><TD align="center" width="3%"><INPUT type="radio" name="CONTENT_ID" value="0000200020001"> </TD><TD width="14%">test </TD><TD width="14%">test </TD><TD width="14%">abc </TD><TD width="14%">ez.amc </TD><TD width="13%"> 67,269 </TD><TD width="13%">2004/05/25 17:43:13 </TD><TD width="8%">、ハ、キ</TD> <TR bgcolor= ><TD align="center" width="3%"><INPUT type="radio" name="CONTENT_ID" value="0000100050001"> </TD><TD width="14%">premiumPPV </TD><TD width="14%">ppv </TD><TD width="14%">premium </TD><TD width="14%">ez.amc </TD><TD width="13%"> 67,269 </TD><TD width="13%">2003/10/23 10:51:38 </TD><TD width="8%">、ハ、キ</TD> <TR bgcolor=#FFCC99><TD align="center" width="3%"><INPUT type="radio" name="CONTENT_ID" value="0000100060001"> </TD><TD width="14%">kccsppv </TD><TD width="14%">a </TD><TD width="14%">abc </TD><TD width="14%">ez.amc </TD><TD width="13%"> 67,269 </TD><TD width="13%">2004/08/24 10:58:05 </TD><TD width="8%">、ハ、キ</TD> <TR bgcolor= ><TD align="center" width="3%"><INPUT type="radio" name="CONTENT_ID" value="0000100110001"> </TD><TD width="14%">ST_PRE_EZ。ハ」ナ」レ・爍シ・モ。シ。ヒ </TD><TD width="14%">ST_PRE_EZ。ハ」ナ」レ・爍シ・モ。シ。ヒ </TD><TD width="14%">ST_PRE_EZ。ハ」ナ」レ・爍シ・モ。シ。ヒ </TD><TD width="14%">ez.amc </TD><TD width="13%"> 67,269 </TD><TD width="13%">2003/11/13 18:00:54 </TD><TD width="8%">、ハ、キ</TD> <TR bgcolor=#FFCC99><TD align="center" width="3%"><INPUT type="radio" name="CONTENT_ID" value="0000100840001"> </TD><TD width="14%">ppv_EZmovie_pre </TD><TD width="14%">ppv_EZmovie_pre </TD><TD width="14%">ppv_EZmovie_pre </TD><TD width="14%">ez.amc </TD><TD width="13%"> 67,269 </TD><TD width="13%">2003/11/16 16:52:26 </TD><TD width="8%">、ハ、キ</TD> <TR bgcolor= ><TD align="center" width="3%"><INPUT type="radio" name="CONTENT_ID" value="0000102520001"> </TD><TD width="14%">マ「キネ。ハEZMOVIE_PREM_PPV) </TD><TD width="14%">マ「キネ。ハEZMOVIE_PREM_PPV) </TD><TD width="14%">マ「キネ。ハEZMOVIE_PREM_PPV) </TD><TD width="14%">ez.amc </TD><TD width="13%"> 67,269 </TD><TD width="13%">2003/11/18 20:42:19 </TD><TD width="8%">、ハ、キ</TD> <input type="hidden" name="TOTAL_PAGE" value ="28"> <input type="hidden" name="MOTO" value ="S"> <input type="hidden" name="SERVICE_ID" value =""> <input type="hidden" name="GROUP_ID" value =""> <input type="hidden" name="CON_TITLE" value =""> <input type="hidden" name="CON_FILE" value =""> <input type="hidden" name="DATA_TYPE" value =""> <input type="hidden" name="CUR_PAGE" value ="6"> </TABLE><BR> </FORM></CENTER></BODY></HTML> 問題を見つからないです。 |
|
akuroと申します。 MACの改行コード(CR)の扱いについておうかがしたいことがございます。 RedHat8.0上コマンドラインより、 vi lunux.txt ------------- aiueo kakikukeko sasisuseso というファイルを作成し、これの改行コードを¥r→¥nに変換しました。 perl -pe 's/¥n/¥r/' linux.txt > mac.txt このファイルをWindows2000クライアントPCにDLしメモ帳で表示したところ。 -------- aiueo■kakikukeko■sasisuseso■ (実際は■は半分くらいの大きさです) となり、¥rが存在する事が確認できます。 自動で改行コードを認識するエディタで表示させると改行されて表示されます。 (サクラエディタ使用) この処理を、Vine2.6R4上で実行し、メモ帳、サクラエディタで見たところ ------- aiueokakikukekosasisuseso 両エディタでみてもこのようになっておりました。 ただ、¥r自体は存在するようなのですが、うまく反映されないのです。 (この結果はFreeBSD5.2でも同様でした。) 色々とこの現象について調べてはいるのですが、原因不明です。 どなたかおわかりの方がいらっしゃいましたらよろしくお願いします。 それと、情報が足りない点がありましたらご指摘お願いいたします。 |
|
>>3983 田 こちらの環境ではいずれも正常に表示されたので、解決方法は わかりませんでした。少しずつ出力を削り、どこがまずいのか 調べましょう。 もし他の掲示板で質問する場合は、これまでに述べた環境に 加え、テーブルのどの部分がどういうふうに崩れるのかを 書くとよいでしょう。 >>3984 akuro まずは問題が発生している箇所を切り分けましょう。 perl 実行後に od -cx などでファイルの内容を確認しましょう。 \r になっているなら、Windows 側かファイル転送時の問題です。 \r になっていないなら、Linux 側の問題です。 |
|
>>3985 68user 返信ありがとうございます。 早速ファイルを確認してみましたところ、 (Vine,redhat8.0での確認) →FREEBSDの方は今起動できないため後でテストしてみます。 0000000 a i u e o \r k a k i k u k e k o 6961 6575 0d6f 616b 696b 756b 656b 6f6b 0000020 \r s a s i s u s e s o \r 730d 7361 7369 7375 7365 0d6f 0000034 と同じ結果となり、¥rは存在する事が判明しました。 という事は、”Windows 側かファイル転送時”の問題のようです。 ファイルの取得方法はRedHatもVineもWinSCPを使用して受けとりました。 受け取ったクライアントPCは同じなので原因は転送時の気がします。 となると、SSHの設定かもしれないです。 まだ、原因はわかりませんが引き続き調査してみます。 |
|
>>3986 akuro 原因は、WinSCPでの転送中にファイルが加工されていたためでした。 一度ローカルにDLした後に、再度サーバーへUPしたところ ファイルのダンプデータが異なりました(ファイルサイズも)。 0000000 a i u e o \r k a k i k u k e k o 6961 6575 0d6f 616b 696b 756b 656b 6f6b 0000020 \r s a s i s u s e s o \r 730d 7361 7369 7375 7365 0d6f ↓DL、UP後 0000000 a i u e o k a k i k u k e k o s 6961 6575 6b6f 6b61 6b69 6b75 6b65 736f 0000020 a s i s u s e s o \0 7361 7369 7375 7365 006f 0000031 sshd_configを調べてみても、転送モードらしきものは見つかりませんでした。 なにかよい方法はありませんでしょうか。 (FTPでバイナリモードにするしかないのでしょうか) FTPを使用してバイナリ転送したところ、問題なく転送できました。 |
|
>>3987 akuro WinSCP は知りませんが、 http://itc.sfc.keio.ac.jp/ml/ の「2-6. 転送モードで[テキスト(T)] を選択します」という設定画面で モード切替を行なえるように見えます。 > sshd_configを調べてみても、転送モードらしきものは見つかりませんでした。 わたしの知る限り、UNIX 的な ssh・scp は改行コード置換は行ないません。 WinSCP 独自のおせっかいな機能でしょう。 |
|
>>>3987 akuroと申します。なんども申し訳ありません。 先ほどは、改行コードを¥n→¥r変換しましたが。 ¥nのままでもファイルに異常が生じるかテストしてみました所、 ¥nの場合は問題なく転送できました。 |
|
>>3988 68user 返信ありがとうございます。akuroです。 問題解決いたしました。 ご指摘いただいたWinSCPの転送をバイナリにしたところ 問題なく転送できました。 ありがとうございました。 |
|
sugimotoと申します。 OpenSSLとRSA暗号を調べていてここに辿りつきました。 あるユーザ様とCGIを介してデータ通信を行おうとしているのですが、ユーザ 様の指定で、データはRFC2313に準拠したRSA暗号化して送るという事になって ます。 暗号化/復号については68user様のネットワークプログラミングの基礎を参考 に作れそうなのですが、唯一解決できない問題がありまして、ここに質問して おります。 【問題点】 ユーザ様から提示された仕様には暗号化キー/復号キーがそれぞれ1つしか 無い。 RSAはモジュラスと私有指数,公開指数で暗号化/復号を行えるという理解な のですが、ユーザ様の仕様ではモジュラスに該当する仕様が無いのです。 RSAにおいて、このような事は可能なのでしょうか? 例えば、opessl genrsaコマンドで作成したRSAキーなら、関数を使えば指数 とモジュラスに分割できるよ。など情報がありましたら教えて下さい。 ※ユーザ様にも問い合わせ中なのですが、レスポンスの問題がありまして、 こちらにも質問した次第です。 よろしくお願いいたします。 |
|
>>3991 sugimoto > RSAはモジュラスと私有指数,公開指数で暗号化/復号を行えるという理解な > のですが そのとおりです。 > ユーザ様の仕様ではモジュラスに該当する仕様が無いのです。 これは定義の問題ではないでしょうか? 仕様にある「暗号化キー」は、 実は「モジュラスと公開指数」を意味する、ということはないですか? # 「暗号化キー/復号キー」が具体的に何を指すのかよくわからない # ので何ともいえないのですが。 > 例えば、opessl genrsaコマンドで作成したRSAキーなら、関数を使えば > 指数とモジュラスに分割できるよ。など情報がありましたら教えて下さい。 genrsa で出力されるデータには、モジュラス・公開指数・非公開指数全てが 含まれていますので、可能です (openssl genrsa で生成したデータを読み込み、 openssl rsa -pubout で公開鍵を出力できるわけなので)。 試してませんが、genrsa で生成した PEM ファイルを http://www.openssl.org/docs/crypto/pem.html などで読み込み、RSA 構造体を参照すればよいのではないでしょうか。 |
|
>>3992 68user 素早い回答どうも有難うございます。> 68User様 > > ユーザ様の仕様ではモジュラスに該当する仕様が無いのです。 > これは定義の問題ではないでしょうか? 仕様にある「暗号化キー」は、 > 実は「モジュラスと公開指数」を意味する、ということはないですか? ユーザからの回答として、上記が来る事を心待ちにしている所です。 PEMファイルからモジュラスを抜き出す処理については、ユーザからの回 答を待ってからにしようと思っておりますが、必要になった場合は頑張って みます。この処理を行いましたらまた報告します。 |
|
>>3993 sugimoto sugimotoです。 結局PEMファイルから秘密指数/公開指数とモジュラスを抜き出す事にしました。 プライベート鍵ファイルからの読み込みは PEM_read_RSAPrivateKey()という関数を利用する事で上手く行ったのですが、 パブリックキーの読み込みに失敗している状態です。 以下が読み込みプログラム RSA *ReadPublicKey(char *keyfile) { FILE *fp = fopen (keyfile, "r"); RSA *pkey; if (!fp) return NULL; pkey = PEM_read_RSAPublicKey(fp,NULL,NULL,NULL); fclose (fp); if (pkey == NULL) ERR_print_errors_fp (stderr); return pkey; } この関数を実行すると、以下のエラーが出てしまいます。 === ここから === 5563:error:0906D06C:PEM routines:PEM_read_bio:no start line:pem_lib.c:669:Expect ing: RSA PUBLIC KEY Error: can't load public key === ここまで === 渡しているファイルは openssl rsa -in private.key -pubout -out public.key で作成した、public.keyになります。 ちなみに、private.keyの読み込みは上記関数のPEM_read_RSAPublicKeyを PEM_read_RSAPrivateKeyに変えた物で、問題無く動作します。 どなたか、private.keyの読み込みを行った方が居ましたら、助言をお願い いたします。 |
|
>>3994 sugimoto 今実行環境がないのでわかりませんが、とりあえず気になったところだけ。 > プライベート鍵ファイルからの読み込みは > PEM_read_RSAPrivateKey()という関数を利用する事で上手く行ったのですが、 これで RSA 構造体に「秘密指数/公開指数とモジュラス」がセットされていませんか? あと、目的がよくわからないのですが、PEM ファイルは誰が作るのですか? (自分? 相手?) なぜ「秘密指数/公開指数とモジュラス」を抜き出す必要があるのでしょうか? |
|
>>3995 68user > > プライベート鍵ファイルからの読み込みは > > PEM_read_RSAPrivateKey()という関数を利用する事で上手く行ったのですが、 > これで RSA 構造体に「秘密指数/公開指数とモジュラス」がセットされていませんか? はい。セットされます。 動作の確認のため、パブリック鍵ファイルも読み込みたかったのです。 > あと、目的がよくわからないのですが、PEM ファイルは誰が作るのですか? (自分? 相手?) PEMは自分で作成して、一方を相手に渡します。 > なぜ「秘密指数/公開指数とモジュラス」を抜き出す必要があるのでしょうか? PEMファイルの鍵を使って暗号化と復号を行いたいからです。 で、当初の問題であったパブリック鍵の読み込みですが、 PEM_read_RSA_PUBKEY() という関数を使ったところ上手く行きました。 色々ご助言いただき有難うございました。 |
|
>>3996 sugimoto > PEMファイルの鍵を使って暗号化と復号を行いたいからです。 PEM ファイルをロードしたら RSA 構造体が生成されるわけですから、 それを使って OpenSSL の関数で RFC2313 (PKCS#1) なデータを生成 するのはダメなのですか? …と質問しようかと思ったのですが、おそらく「そういう仕様である」が 答えなような気がしますのでやめておきます。 |
|
>>3997 68user あー、公開指数とモジュラスだけ (独自フォーマットで 相手側に送りたい、 という意図かな。 |
|
>>3998 68user やりたい事を上手く伝える事ができないくて、すみません。 送信者は平文をPEM形式のパブリック鍵で暗号化し、 受信者はPEM形式のプライベート鍵で復号する。 という事を実現したかっただけなのです。 暗号化/復号の際にはPEM形式ファイル内の指数とモジュラスを抜き出す 必要があって・・・という話です。 と、ここまで書いて思ったのですが、もしかしてPEM形式の鍵をそのまま 使ってRSA暗号化する関数が存在するのでしょうか? とすれば、何て無駄な事をしているんだ・・・。という感じです。 |
|
はじめまして。 「HTTPクライアントを作ってみよう」に関して質問させてください。 一般的なHPなら「HTTPクライアントを作ってみよう(2)」のソースで、指定されたURLのhtmlファイル のソースを読み込むことができますが、Operaブラウザでオートリダイレクトを有効にしていない場合 に表示されないようなURLを指定すると <head><title>Object moved</title></head> <body><h1>Object Moved</h1>This object may be found <a HREF="">here</a>.</body> のようなhtmlソースを拾ってきてしまいます。 リダイレクト先のhtmlソースを拾ってくるようにしたいのですが、どのようにすればいいのでしょうか。 よろしくお願いします。 |
|
>>3999 sugimoto > 送信者は平文をPEM形式のパブリック鍵で暗号化し、 まずこの表現が微妙に変です。PEM はフォーマットのひとつでしかありません。 「送信者は PEM形式で保存されている公開鍵を使って暗号化し」ならわかります。 # わかっている人が書いた文章であればあまり気になりませんが、今回は # どうも理解があやしいのではないかという気がします。 PEM 形式でファイルに保存されている鍵を使って RSA で暗号化するのであれば、 PEM_read_RSAPrivateKey でファイルから鍵を読み込み、RSA 構造体に適切な データをセットして、 http://X68000.q-e-d.net/~68user/net/rsa-1.html のように RSA_private_encrypt を使えばすみます。モジュラスなどを参照する 必要はありません。 コマンドラインから行うなら openssl rsautl -encrypt でも同じ結果になると 思われます。 なお、PKCS#1 では鍵が k オクテットのとき、最大でも k-11 オクテットのデータ しか暗号化できませんが、それはよいのですか? >>4000 nira > リダイレクト先のhtmlソースを拾ってくるようにしたいのですが Location ヘッダを見て、再度リクエストを送る必要があります。 http://X68000.q-e-d.net/~68user/net/http-4.html#3 をどうぞ。 |
|
はじめまして!! おしえてください。 UNIX(HP)のサーバー間でファイルを大量コピーする作業があります。 rcp -pr コマンドを使用したところ、ログインしたユーザ名で全てのファイルが移動されて しまいます。 例)user1 file0001 コピー後⇒ user1 file0001 root file0002 user1 file0002 所有者を変更せずにコピーできる方法があれば どなたかご教授願います。 宜しくお願いします<m(__)m> |
|
>>4002 アンドロメダ root で実行してもダメですか? もしダメなら tar で固めてそれを rcp し、 tar xfp で展開するとよいでしょう。 |
|
>>4002 アンドロメダ rcpの-pオプションはパーミッションは保持されますが ファイルのオーナーは変わってしまいます。 (Solaris、AIXでも同様) 大ざっぱですが、こんな感じで... tar cfp - ./from_dir | rsh to_server "cd to_dir; tar xfp -" |
|
みなさんアドバイスありがとうございました。 tarでまとめてリモートコピーする方法でテストしたところ うまくできました。 ありがとうございました。\(^O^)/ |
|
はじめまして、くろと申します。 ここのサイトのネットワークプログラミング[ SSL/TLS でアクセスしてみよう (1) ]の サンプルを元に、https接続で、メソッドをGETではなくPOSTで、データを送信したところ HTTPステータス[400 Bad Request]が戻ってきてしまいます。 リクエストのヘッダーがおかしいのかな?と思い、下記のようにしたのですが、 POST プログラム名 HTTP/1.0 User-Agent: Mozilla/4.0 (compatible; MSIE 5.0; Windows NT 5.0) Content-Length: 270 Content-type: text/xml; charset=utf-8 上手くいきませんでした。(改行コードは、\r\nです) このステータスが戻ってくる原因として、他にどんなことが考えられますでしょうか? 正直、今の私にはここまで限界で・・・ どなたかご存知の方がいらっしゃいましたら、教えていただけませんでしょうか? 宜しくお願い致します。 |
|
>>4006 くろ > POST プログラム名 HTTP/1.0 プログラム名って何ですか? https でなく http ならうまくいくんですか? POST でなく GET ならうまくいくんですか? POST を受けてくれる SSL/TLS サーバが手元にないので、 https://www.rsasecurity.com/solutionsPrimary.asp に対して以下のリクエストを送信してみましたが、正常なレスポンスを 取得できました。 POST /solutionsPrimary.asp HTTP/1.0 Host: www.rsasecurity.com Content-Length: 2 ab |
|
>>4007 68user 説明に至らない点があったみたいで、すみません。 >プログラム名って何ですか? これは、POSTをするプログラム名を指しています。 教えて頂いたURLに、POSTしてみたのですが、 サーバーからのレスポンスとして、「HTTP/1.1 400 Bad Request」 が戻ってきました。。。 68userさんでは、上手くいっているようなので、 私のプログラムの問題のようですね。。。 既に6日間も悪戦苦闘しますので、 なにか助言などありましたら、お手数ですが宜しくお願いします。 |
|
>>4008 くろ > これは、POSTをするプログラム名を指しています。 だからプログラム名って具体的に何ですか? POST hoge HTTP/1.0 とかしてたりしませんか? ちゃんと POST /hoge HTTP/1.0 としていますか? んなこたわかっとると思われるかもしれませんが、あなたのレベルが わからないので、こういうところから確認しているんですよ。 |
|
>>4008 くろ > 教えて頂いたURLに、POSTしてみたのですが、 > サーバーからのレスポンスとして、「HTTP/1.1 400 Bad Request」 > が戻ってきました。。。 ああ、これを見落としていました。 ではリクエストのやり方が悪いのでしょう。ソースを提示してください。 |
|
>>4010 68user ご迷惑をお掛けしまして、大変申し訳ありません。 プログラム名ですが、[POST hoge HTTP/1.0] という感じで、 設定しております。 以下がソースになります。 +−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−+ #include <stdio.h> #include <string.h> #include <sys/types.h> #include <netdb.h> #include <sys/socket.h> #include <netinet/in.h> #include <sys/types.h> #include <sys/uio.h> #include <unistd.h> #include <openssl/crypto.h> #include <openssl/x509.h> #include <openssl/pem.h> #include <openssl/ssl.h> #include <openssl/err.h> #define EXT_OK 0 #define EXT_ERR -1 #define LINE_MAX_LEN 512 #define FILE_PATH_LEN 256 #define SEND_XML_LEN 640 #define RECV_VAL_LEN 256 #define SEND_VALUE "xml=送信データ" int main(int argc ,char *argv[]) { int ierr = 0; int isockt = 0; int read_size = 0; struct hostent *servhost; // サーバ情報構造体 struct sockaddr_in server; // ソケット構造体 struct servent *service; // サービス構造体 SSL *ssl; SSL_CTX *ctx; char *str; char send_buf[SEND_XML_LEN + 1]; // 送信データ char request[SEND_XML_LEN + 1]; // ヘッダー char total_buf[RECV_VAL_LEN + SEND_XML_LEN + 1]; // 送信データ(ヘッダー + データ) char *host = "接続先ホスト名"; // サーバ名セット char *path = "CGIパス"; // CGI名セット char buf[RECV_VAL_LEN]; memset(send_buf,'\0',sizeof(send_buf)); memset(request,'\0',sizeof(request)); memset(total_buf,'\0',sizeof(total_buf)); servhost = gethostbyname(host); if ( servhost == NULL ) { fprintf(stderr, "[%s] から IP アドレスへの変換に失敗しました。\n", host); exit( EXT_ERR ); } bzero((char *)&server, sizeof(server)); server.sin_family = AF_INET; bcopy(servhost->h_addr, (char *)&server.sin_addr, servhost->h_length); service = getservbyname("https", "tcp"); // ポート番号取得 if ( service != NULL ) { server.sin_port = service->s_port; } else { server.sin_port = htons(443); // 取得できなかったら、ポート番号を 443 に決め打ち } isockt = socket(AF_INET, SOCK_STREAM, 0); if ( isockt < 0 ) { fprintf(stderr, "ソケットの生成に失敗しました。\n"); exit( EXT_ERR ); } if ( connect(isockt, (struct sockaddr*) &server, sizeof(server)) == -1 ) { fprintf(stderr, "connect に失敗しました。\n"); exit( EXT_ERR ); } SSL_library_init(); // SSLのライブラリを初期化 SSL_load_error_strings(); // SSLエラーメッセージ Catch ctx = SSL_CTX_new(SSLv23_client_method()); // SSLv2を使用 ssl = SSL_new(ctx); SSL_set_fd(ssl, isockt); // SSLとソケットの関連付け ierr = SSL_connect(ssl); sprintf(send_buf,"%s",SEND_VALUE); sprintf(request, "POST %s.cgi HTTP/1.0\r\n" "User-Agent: Mozilla/4.0 (compatible; MSIE 5.0; Windows NT 5.0)\r\n" "Content-Length: %d\r\nContent-type: text/xml; " "charset=utf-8\r\n\r\n",argv[0],strlen(send_buf)); sprintf(total_buf,"%s%s",request,send_buf); ierr = SSL_write(ssl, total_buf, strlen(total_buf)); printf("サーバからのレスポンス\n"); while (1) { memset(buf,'\0',sizeof(buf)); read_size = 0; read_size = SSL_read(ssl, buf, sizeof(buf)-1); buf[read_size] = '\0'; if ( read_size > 0 ) { write(1, buf, read_size); } else { break; } } SSL_shutdown(ssl); close(isockt); // ソケットクローズ SSL_free(ssl); SSL_CTX_free(ctx); exit( EXT_OK ); } +−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−+ 申し訳ありませんが、ご教授ください。 宜しくお願いします。 |
|
>>4011 くろ SSL/TLS 以前の問題に見えます。http://X68000.q-e-d.net/~68user/net/ の HTTP クライアントを作ってみよう(1)〜(4) を読んでください。 |
|
>>4012 68user ご指摘ありがとうございました。 なんと接続することができました。 ご迷惑をお掛けしまして、申し訳ありません。 |
|
環境変数にセットする値をConfigFileから読み込む仕様のシェルがあります。 しかし今その環境変数の値にスペースがある場合にうまく動きません。 具体的には configFile内に T_DATE=`date +'%Y%m%d%H%M%S'` と記述して実際のBシェルの中で for var in `cat ${CONFIG}` do export $var done としています。 想定としては export T_DATE=`date +'%Y%m%d%H%M%S'` となってほしいのですが 実際には export T_DATE=`date export +'%Y%m%d%H%M%S'`=+'%Y%m%d%H%M%S'` という2つの変数として扱われてしまいます。 これを回避する方法はありませんでしょうか。 使用している環境はHP-UX B.11.11 です。 |
|
>>4014 どんぐ while read line; do eval $line done < ${CONFIG} てな感じでどうでしょうか。 |
|
Vacancies in SUN China In 1982 Sun Microsystems created a business vision named “The Network is the Computer”. In the same year Sun initiated R&D on Java Technology. Today Sun is recognized by all as the Premier Network Enterprise Computing Vendor and have a global presence in over 100 countries. In 1987, Sun entered China market and has been dedicated to the technology and customer solution development in China. Customer Solution Center in Beijing expand repidly to provide technical hot line suppot to mission critical customers. We invite top nortch engineers to join our champion team in Beijing to provide world-class customer services. Solution Center Engineer (GC0201938) (53 Vacancies) UNIX generalist responsible for providing system support that includes hardware, software, software applications, and networking to customers via telephone support. Incumbent must be university graduate in Computer Science / Electronic Engineering, knowledgable in O/S like Unix, Linux or Solaris systems, fluent in written and spoken Japanese and with minimum 3 years of Unix Sever Support, System Integration or internal MIS support of Unix Sever. Solution Center Manager (GC0201941) (2 Vacancies) Manages and directs the activities of the Solution Center teams to provide customer facing technical post sales support of both hardware and software issues. Accountable for meeting operational excellence, customer satisfaction and people management goals of Solution Center. Liaise closely with the product technical support group for technical escalation as well as the local field operations. Incumbent must be Universtiy graduate in Computer Science / Electronics Engineering, 10 years customer support experience with 5 years in managerial capacity and fluent in written and spoken Japanese, good English is a plus. To apply this position, Please send your resume in English, Mandarin or Japanese and marked with position code to Lisa.wu@multimage.com.cn. Contact: Tel: +86 10-65057881-17 Lisa 84580901-17 Lisa Mob: 13501160969 Fax: +86 10-65057880/84583069 |
|
duコマンドで、ディスクの使用率をバイトで表示しようと以下の コマンドを実施したのですが、サイズとディレクトリ名との間に 改行が入り、一行で表示できません。 サイズとディレクトリ名を一行で表示し、その後、改行したいの ですがどうすればよいですか。 5295104 . 2594816 ./tmp1 1864704 ./tmp2 821248 ./tmp3 10240 ./tmp4 ↓ 5295104 . 2594816 ./tmp1 1864704 ./tmp2 821248 ./tmp3 10240 ./tmp4 としたいのですが。 du -k $1 | sort -n -r | awk '{ system("echo "$1"*1024 | bc"); printf(" %s\n", $2) }' |
|
>>4017 さいさん > du -k $1 | sort -n -r | awk '{ system("echo "$1"*1024 | bc"); printf(" %s\n", $2) }' 改行コードが余分なわけなので du -k | sort -nr | awk '{ system("echo "$1"*1024 | bc | tr -d \\\\n"); printf(" %s\n", $2) }' du -k | sort -nr | awk '{ system("echo -n `echo "$1"*1024 | bc`"); printf(" %s\n", $2) }' とか。 わたしなら「わかりづらい」「無駄なプロセス生成が嫌」という理由から、 du -k | sort -nr | awk '{ printf("%6d %s\n",$1*1024,$2)}' などとします。 |
|
>>4018 68user >du -k | sort -nr | awk '{ printf("%10d %s\n",$1*1024,$2)}' と最初はやっていたのですが、$1に設定されるブロックサイズが大きい と「$1*1024」でオーバーフローを起こし、正しい計算ができないので systemで、bcで計算をするようなことに |
|
>>4017 さいさん >>4018 68user >du -k | sort -nr | awk '{ system("echo -n `echo "$1"*1024 | bc`"); printf(" %s\n", $2) }' サーバとかOSのバーションとか記述されてませんでしたけど、 「echo -n」は、依存しませんでしたか。 |
|
>>4107 68user >>4018 68user >du -k | sort -nr | awk '{ system("echo -n `echo "$1"*1024 | bc`"); printf(" %s\n", $2) }' shかcshで異なるみたいです。 バークレイ版では、「\c」 エスケープを「-n」オプションで代用することができます。 echo が csh(1) の組み込み関数として用いられている場合には、バークレイ方式に 従っています。 #du -k $1 | sort -nr | awk '{ system("echo `echo "$1"*1024 | bc` \\\\c"); printf(" %s\n", $2) }' で、できました。 |
|
こんにちは kenといいます。 Winsockを使ってネットワークの勉強してまして大変勉強になりました。 ソケットプログラミングを進めていくうちにどうしてもわからない点が発生 したので、もしよろしければとおもいメールしました。 問題はSend()/Recv()でパケットサイズを超えるデータを連続で 送受信させたいのです。 パケットを超える送信をするにはsend()の引数にバッファ、サイズを そのままのっければ、自動でパケットサイズに切り分けて送信してる のを確認しました。ですが、受信終了を示す返り値のlengs=0を受信 できませんでした。どうも送ってないようです。httpサーバーに接続して 受信をためしたのですが、lengs=0を確認でき連続で受信することができました。 recv()での受信lengs:0はシャットダウンを意味するとの記述も見つけたのですが、 shutdown()では送信復帰ができないので、使えません。 パケットサイズを超えるデータを連続で送信し受信する時、 受信データの終了を送信したり、受信するにはどうすればいいので しょうか? サーバーがファイルの終了を示すleng=0を送信するのは なにか命令があるのでしょうか? ソケットをシャットダウンするとleng=0を送信できますが シャットダウンを復帰できないはずですがしてるのでしょうか? よかったらレスお願いしますm(__)m page:homepage3.nifty.com/MIDI-EDITOR/ mail:NQD00781@nifty.com ken |
|
>>4022 ken TCP ですか? それとも UDP ですか? > パケットサイズを超えるデータ パケットサイズって具体的に何のことを指していますか? > 受信終了を示す返り値のlengs=0を受信できませんでした。 送信側で close か shutdown しましたか? > shutdown()では送信復帰ができないので、使えません。 送信復帰って何ですか? |
|
sedを使用して先頭1行目のみ置換を行い、 すべてを出力させたいのですが、どうすれば よいですか。 sed 's/o=test$/o=honban/g' とすると置換は行われますが、先頭1行目のみ だけしたいのです。 CM1: id=00001,nm=test,o=aaa,o=test CM2: mod CM3: option - CM4: ftp CM5: get ↓ CM1: id=00001,nm=test,o=aaa,o=honban CM2: mod CM3: option - CM4: ftp CM5: get |
|
>TCP ですか? それとも UDP ですか? TCPです。 >> パケットサイズを超えるデータ >パケットサイズって具体的に何のことを指していますか? send()/recv()での送信、受信レングスです。 この場合では、Recv時のレングスです。 >> 受信終了を示す返り値のlengs=0を受信できませんでした。 >送信側で close か shutdown しましたか? サーバー側でデータを送信し、終了したらshutdown/closeを行うべき なのでしょうか? 確かにレングス0を受信できますが、その後に 送受信を必要な場合はどうすればいいのでしょうか? httpサーバーにアクセスした時はレングス0が帰ってきたのですが、 shutdownしていたのでしょうか? >> shutdown()では送信復帰ができないので、使えません。 >送信復帰って何ですか? 送信の終了を示す、レングス0を送るためにclose/shutdownを使うと、 その後にアクセスができなくなる。 shutodownしたソケットを再使用は危険とMSDNにでてます。 |
|
>>4024 どっかん sed -e '1s/o=test$/o=honban/' |
|
>>4025 ken 要は、ピアが送信したデータが全部届いたことを確認したいのですか? それならば、TCP/IP のレベルではなくアプリケーションのプロトコル レベルで実現するのが普通です。 例: - 送信側は「データ長 + データ」を送信。受信側は最初に受け取った データ長の分だけデータを受信したら、全データ到着とみなす。 - 改行コードをプロトコルのひとまとまりとみなす。送信側は データの末尾に改行コードをつけて送信。受信側は改行コードを 受け取ったら全データ受信とみなす。 端的に言うと、 recv の戻り値が 0 = FIN が届いたとき です (ノンブロッキングモードなどの例外はあるかと思いますが)。 で、FIN を投げるには close か shutdown する必要があるということです。 |
|
レスありがとうございました。m(__)m >要は、ピアが送信したデータが全部届いたことを確認したいのですか? はい。 >それならば、TCP/IP のレベルではなくアプリケーションのプロトコル >レベルで実現するのが普通です。 httpサーバーにつなげてhtmlを受信した場合に受信終了時にrecv()戻り値が 0を送っていたのは、shutdown()がかかっていたと判断していいのでしょうか? だとすれば、再度htmlを受信する場合は、再度acceptでsocketを作成して受信 開始する必要があるのかテストする必要を感じました。 何度もレスいただきましてありがとうございました。 |
|
>>4028 ken > shutdown()がかかっていたと判断していいのでしょうか? http サーバが shutdown か close したと判断してよいです。 > 再度htmlを受信する場合は、再度acceptでsocketを作成して受信 > 開始する必要があるのかテストする必要を感じました。 再度接続する場合は、クライアント側は socket を生成して connect しなおす必要があります。サーバ側はリスニングソケットは listen しっぱなしなので、クライアントが接続しなおしてきたら accept すれば よいです。 ただし毎回接続・切断を繰り返していては性能が出ないため、HTTP/1.1 に おいて keep-alive やパイプラインなどの、コネクションを切断せずに 複数のデータを取得するための仕組みが考案されているわけです (これも アプリケーション層での工夫です)。 |
|
>>4001 68user 2週間程前PEM形式ファイルの読み込みで質問した者です。 なんとか手元を離れたので簡単に報告です。 処理は68user様のご指摘の通り行う事で全て対応できました。 色々ありがとうございました。 行ったのは以下の3処理です。 ・PEM_read_RSAPrivateKey()でPEM形式ファイルを読み込む処理 パスワード付きの場合の処理で少し苦労・・・ ・RSA_private_encrypt()で暗号化する処理 ・Base64エンコードの要求があったので、EVP_EncodeBlock()でエンコー ド処理 出来上がれば単純なのですが、着手した時は全くの白紙状態でしたので 本当に助かりました。有難うございました。 |
|
いつも参考にさせていただいております。 初めて投稿します。 上田といいます。 よろしくお願いします。 『echo サーバを作ってみよう (3)』を参考にして、echoサーバを作成してみました。 概ねはうまくいきました。 しかし、おそらく子プロセスのものだと思うのですが、defunct(ゾンビ)が残ってしまいます。 このdefunct(ゾンビ)をうまく消す方法はないものでしょうか? ちなみに、私の環境は Cobalt LINUX 5.0 です。 もし、私の勘違いでしたらすみません。お許し下さい。 以上、よろしくお願いいたします。 上田 |
|
>>4031 上田 > このdefunct(ゾンビ)をうまく消す方法はないものでしょうか? サンプルプログラムでは wait をさぼっているためゾンビが残ります。 サンプルを直そうと思いつつ、はや 2年近く経ってしまいました。 ひとつのやり方として、 >>2584 persianopeh のように SIGCHLD をキャッチする方法があります。あるいは WNOHANG を 指定して waitpid してもよいです。 |
|
>>4032 68user 68userさん、ありがとうございます。 教えていただいた $SIG{CHLD} = sub { wait }; ですが、不勉強なもので、記述する場所に若干の不安が残っています。 一応、43行目と44行目の間に記述したところ、次の3つは達成できました(目的は達成できました)。 ・サーバ機能 ・複数同時アクセス ・defunctの消去 もし記述する場所が間違っていれば、またご連絡いただけないでしょうか? 36: # forkで子プロセスを生成 37: if ( $pid = fork() ){ 38: # こちらは親プロセス 39: print "親プロセス($$): 引続きポート $port を見張ります。\n"; 40: print "親プロセス($$): クライアントの相手はプロセス $pid が行います。\n"; 41: 42: # 親プロセスはソケットをクローズ 43: close(CLIENT); $SIG{CHLD} = sub { wait }; #←←←ここに追加しました。 44: next; 以上、ありがとうございました。 今後ともよろしくお願いいたします。 上田 |
|
Cシェルの中で、sqlplusに接続してsqlを実行して結果を表示したいのですが、どのようにすればよいですか? 皆さん、教えてください。よろしくお願いします。 |
|
始めまして。 sedコマンドで、改行を含む文字列へ変換したいのですが、どのようにすればいいですか? abcde ------ fgh ijk たとえば、abcdeをfgh(改行)ijkとしたい場合、 sed "s/abcde/fghijk/g" file1 > file2 これでは改行無しで置換されてしまいます。 \n,\r\nなど埋め込んでみましたがうまくいきませんでした。 皆さん教えてください、宜しくお願いします。 |
|
Cシェルの中で、コマンドオプションの有無を判断するのには、どのようにIF文を書けば良いですか? 教えてください、よろしくお願いします。 |
|
>>4034 noza ヒアドキュメントを使うとできた筈ですが sqlplusの引数でユーザ名とパスワードが必要になるため お勧めしません。 >>4035 アトヌル sedでは確か無理だったと思います。 (嘘ついてたらごめんなさい。) >>4036 y コマンドオプションって何ですか?引数の事? |
|
>>4033 上田 fork の前にシグナルハンドラを設定するのが普通かと思います。でないと、 設定前にシグナルが飛んできたら困りますので。 ただしシグナルハンドラは子プロセスに引き継がれるので、fork 後に シグナルハンドラを戻すなどの対処が必要です (この例では子プロセスが SIGCHLD を受けることはないので、どちらでも構わないのですが)。 >>4037 zsh > ヒアドキュメントを使うとできた筈ですが ヒアドキュメントでもいいし、別ファイルにしておいて sqlplus $user/$pass @hoge.sql としてもよいです。 > sqlplusの引数でユーザ名とパスワードが必要になるためお勧めしません。 これはまぁいいんじゃないですかね。Perl で Oracle に接続しても スクリプト中にパスワードを書きますし、Pro*C でもバイナリを strings すればわかりますし。 |
|
yahooオークションの自動ログインシステムをプログラムしていますが、ログインできません。 どなたかご教授願います。以下にソースを掲載しておきます。 import java.net.*; import java.io.*; public class post { public static void main(String[] args) { try { int start = 0; PrintWriter pw = new PrintWriter (new BufferedWriter(new FileWriter("post.html"))); // URLクラスのインスタンスを生成 URL helloURL = new URL("http://login.yahoo.co.jp/config/login"); // 接続します URLConnection con = helloURL.openConnection(); // 出力を行うように設定します con.setDoOutput(true); con.setDoInput(true); con.setRequestProperty("Cookie","B=banotfp0orfbj&b=2"); con.setRequestProperty("Accept-Language", "ja"); con.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)"); // 出力ストリームを取得 PrintWriter out = new PrintWriter(con.getOutputStream()); out.print(".tries=1"); out.print(".done=http://page7.auctions.yahoo.co.jp/jp/auction/g25311966?"); out.print(".src=auc"); out.print("lg=jp"); out.print(".intl=jp"); out.print("login=********"); out.print("passwd=*******"); out.close(); // 入力ストリームを取得 BufferedReader in = new BufferedReader( new InputStreamReader( con.getInputStream(),"JISAutoDetect")); // 一行ずつ読み込みます String line; while ((line = in.readLine()) != null) { // 表示します pw.println(line); } // 入力ストリームを閉じます in.close(); } catch (IOException e) { e.printStackTrace(); } } } post.htmlにはログインされた後の商品ページが表示されます(ログインできれば) |
|
yahooオークションの自動ログインプログラムを開発していますが、どーしてもログイン できません。どなたかご教授願います。以下にソースを掲載します。 import java.net.*; import java.io.*; public class post { public static void main(String[] args) { try { int start = 0; PrintWriter pw = new PrintWriter (new BufferedWriter(new FileWriter("post.html"))); // URLクラスのインスタンスを生成 URL helloURL = new URL("http://login.yahoo.co.jp/config/login"); // 接続します URLConnection con = helloURL.openConnection(); // 出力を行うように設定します con.setDoOutput(true); con.setDoInput(true); con.setRequestProperty("Cookie","B=banotfp0orfbj&b=2"); con.setRequestProperty("Accept-Language", "ja"); con.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)"); // 出力ストリームを取得 PrintWriter out = new PrintWriter(con.getOutputStream()); out.print(".tries=1"); out.print(" |