日記。 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 ありがとうございました。 正規表現、もっと勉強してみます。 |