>>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(".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には正常にログインできれば商品ページのソースを書き込みます。 |
はじめまして、こんばんは. http://x68000.q-e-d.net/~68user/net/c-http-1.html や http://x68000.q-e-d.net/~68user/net/c-http-2.html 関連で、 URL の解釈について、 http://www-cms.phys.s.u-tokyo.ac.jp/~naoki/CIPINTRO/CCGI/pbrowser.html のような記事を見つけました. 正規表現でも見かけられるやりかたでできるのだなぁと目が覚めました. 質問でもなんでもないのですが、お邪魔しましたm(_ _)m |
>>4040 やまさん Java の実行環境がないので検証できませんが、普通にブラウザでアクセスし、 ethereal などでパケットダンプしましょう。さらに自作プログラムのやりとりも 同様にパケットダンプして見比べてみましょう。 >>4041 waka http://www.din.or.jp/~ohzaki/perl.htm#httpURL というのもあります。 scanf 系で %[..] として文字集合が使えるのは初めて知りました。 |
FTPクライアントで分割ダウンロードする場合、 どんなプログラムになるのでしょうか? HTTPクライアントで分割アップロードする場合、 どんなプログラムになるのでしょうか? 教えて頂けませんか? |
>>4043 クライアント > FTPクライアントで分割ダウンロードする場合、 > どんなプログラムになるのでしょうか? REST を使います。 > HTTPクライアントで分割アップロードする場合、 > どんなプログラムになるのでしょうか? 分割アップロードが PUT を指すのか POST を指すのか知りませんが、 規格としては分割アップロードなるものは規定されていないと思います。 サーバ側の CGI なり Servlet なりで引数を解釈するようなつくりに すれば、なんだって可能です。 |
68userさんご教授ありがとうございます。言われたとおりにパケットダンプしてソースを 書き直したところ、今度はcookieが無効であると言う画面がでました。 書き直したソースは以下の通りです。 import java.net.*; import java.io.*; public class post { public static void main(String[] args) { try { int start = 0; PrintWriter pw = new PrintWriter (new BufferedWriter(new FileWriter("post.html"))); // URLクラスのインスタンスを生成 URL helloURL = new URL("http://login.yahoo.co.jp/config/login"); // 接続します URLConnection con = helloURL.openConnection(); // 出力を行うように設定します con.setDoOutput(true); con.setDoInput(true); con.setRequestProperty("Accept","image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*"); con.setRequestProperty("Accept-Language", "ja"); con.setRequestProperty("Content-Type","application/x-www-form-urlencoded"); con.setRequestProperty("Accept-Encoding", "gzip, deflate"); con.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)"); con.setRequestProperty("Host","login.yahoo.co.jp"); con.setRequestProperty("Content-Length","145"); con.setRequestProperty("Connection","Keep-Alive"); con.setRequestProperty("Cache-Control","no-cache"); // 出力ストリームを取得 PrintWriter out = new PrintWriter(con.getOutputStream()); out.print(".tries=1&.done=http%3A%2F%2Fpage7.auctions.yahoo.co.jp%2Fjp%2Fauction%2Fg25311966%3F&.src=auc&lg=jp&.intl=jp&login=formulaatsushi&passwd=formula3"); out.close(); // 入力ストリームを取得 BufferedReader in = new BufferedReader( new InputStreamReader( con.getInputStream(),"JISAutoDetect")); // 一行ずつ読み込みます String line; while ((line = in.readLine()) != null) { // 表示します pw.println(line); } // 入力ストリームを閉じます in.close(); } catch (IOException e) { e.printStackTrace(); } } } etherealのログ POST /config/login HTTP/1.1 Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */* Accept-Language: ja Content-Type: application/x-www-form-urlencoded Accept-Encoding: gzip, deflate User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322) Host: login.yahoo.co.jp Content-Length: 145 Connection: Keep-Alive Cache-Control: no-cache HTTP/1.1 302 Found Date: Tue, 09 Nov 2004 10:41:26 GMT P3P: policyref="http://privacy.yahoo.co.jp/w3c/p3p.xml", CP="CAO DSP COR CUR ADM DEV TAI PSA PSD IVAi IVDi CONi TELo OTPi OUR DELi SAMi OTRi UNRi PUBi IND PHY ONL UNI PUR FIN COM NAV INT DEM CNT STA POL HEA PRE GOV" Location: http://login.yahoo.co.jp/config/verify?.done=http%3a//page7.auctions.yahoo.co.jp/jp/auction/g25311966%3f&.src=auc Cache-Control: private Pragma: no-cache Expires: Thu, 05 Jan 1995 22:00:00 GMT Connection: close Transfer-Encoding: chunked Content-Type: text/html; charset=euc-jp Set-Cookie: B=0jed4t90p17mm&b=2; expires=Thu, 15 Apr 2010 20:00:00 GMT; path=/; domain=.yahoo.co.jp Set-Cookie: F=a=2AxMxi8sve2gE8jFN9rJ0gWrAAvZQREqLtzb2_UZvSzjM5JqtaIqse_xaCta&b=pEuj; expires=Thu, 15 Apr 2010 20:00:00 GMT; path=/; domain=.yahoo.co.jp Set-Cookie: Y=v=1&n=2q7rnefmn4krh&l=5ehckb00jiki78/o&p=m2avvjp403000400&r=bk&lg=jp&intl=jp&np=1; path=/; domain=.yahoo.co.jp Set-Cookie: T=z=W7JkBBWBfkBBIROI05ItUNi&a=YAE&sk=DAA.hvzZ6s/ztd&d=YQFZQUUBb2sBWlcwLQF0aXABYm4ySnNEAXp6AVc3SmtCQmdXQQ--; path=/; domain=.yahoo.co.jp GET /config/verify?.done=http%3a//page7.auctions.yahoo.co.jp/jp/auction/g25311966%3f&.src=auc HTTP/1.1 User-Agent: Java1.4.0 Host: login.yahoo.co.jp Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2 Connection: keep-alive HTTP/1.1 200 OK Date: Tue, 09 Nov 2004 10:41:26 GMT P3P: policyref="http://privacy.yahoo.co.jp/w3c/p3p.xml", CP="CAO DSP COR CUR ADM DEV TAI PSA PSD IVAi IVDi CONi TELo OTPi OUR DELi SAMi OTRi UNRi PUBi IND PHY ONL UNI PUR FIN COM NAV INT DEM CNT STA POL HEA PRE GOV" Refresh: 900; URL=http://www.yahoo.co.jp/ Cache-Control: private Pragma: no-cache Expires: Thu, 05 Jan 1995 22:00:00 GMT Connection: close Transfer-Encoding: chunked Content-Type: text/html; charset=euc-jp Set-Cookie: B=c0ev5h10p17mm&b=2; expires=Thu, 15 Apr 2010 20:00:00 GMT; path=/; domain=.yahoo.co.jp /config/verify?.done=http%3a//page7.auctions.yahoo.co.jp/jp/auction/g25311を getする際にヘッダー情報が変わってしまいます。 どなたかご教授願います。 |
>>4045 やまさん 正解は ethereal が教えてくれているはずですので、こういう質問は回答 する側としては非常につまらないのです。だから、質問する側も、もう ちょっと努力する姿勢を見せてください。 > 今度はcookieが無効であると言う画面がでました などというわけのわからんことを言っていないで、 「IE では〜というリクエストを送っているが、Java だと〜という リクエストを送信してしまう。IE と同じリクエストを送信するには どうしたらよいか」 くらいの質問にブレイクダウンしてください。リクエストとレスポンスを 見比べるだけの注意力があれば簡単なはずです。 あと、HTTP の基本的な知識があるのかないのかさっぱりわからないので、 http://x68000.q-e-d.net/~68user/net/ HTTP クライアントを作ってみよう(1)〜(4) を読んだ上で、telnet を使って接続してみてください。それに成功してから 初めて Java で実現するにはどうすればいいか、という話になるわけです。 一応ヒントだけは出しておきます。 - /config/verify に cookie なしでリクエストしているのは誰か? まだ 提示していないソースがあるのか? URLConnection クラスが自動的に 再接続しているのか? - URLConnection が自動的に再接続しているのであれば、 HttpURLConnection クラスを使って setInstanceFollowRedirects メソッドで再接続を抑止し、自前で cookie 付きで再接続してみては。 |
>>4046 68user > 一応ヒントだけは出しておきます。 試したわけではないので、ヒントが的確かどうかは知りません。念のため。 |
当分の間、本掲示板での UNIX・ネットワークに関する一般的な質問の受け付けを 中止します。理由は http://X68000.q-e-d.net/~68user/cgi-bin/wwwboard.cgi?howtouse さえ読まないマルチポスト馬鹿のせいで不愉快な思いをするのがアホらしくなった からです。UNIX・ネットワークに関する一般的な質問がなされた場合、その書き込みを 削除することがあります。 今後は当ページのコンテンツに対するご意見・ご指摘のみ受け付けます。 あと、雑談も OK です。 これまで回答してくださった方々、まともな質問者の方々には深く感謝 いたします。ありがとうございました。 |
>>4048 68user 懇切丁寧な回答、いままでどうもお疲れ様でした。 なんだかんだ結局見てるだけで力になれず、すんません。 ところで、コンテンツに関するご意見・ご指摘は歓迎とのことですし、このまま 何もやりとりが亡くなるのも寂しいので、ちょっと一言。 「POP3クライアントを作ってみよう」で、APOPではサーバ側に生パスワードを 持っていないといけないという点でセキュリティ上イマイチである、と 書かれていますが、それではどんな方法だと納得できそうですか? (crypt等したパスワードを使うというイメージ or もっとよい案?) |
>>4038 68user 68userさんありがとうございます。返事が遅れてすみません。 実は『シグナルハンドラを戻すなどの対処』部分がよく分かりませんでした。 もしよろしければこの部分のコードを教えていただけないでしょうか? 本当は自分なりに勉強してこの部分のコードを書き、このサイトにアップしたいという気持ちはあるのですが、なにぶん初心者なもので。。。 実際のテストでうまくいっているということと、この例では子プロセスがSIGCHLDを受けることはないとのことですので、当面はとりあえず現在の位置で対応させていただきます。 もし『シグナルハンドラを戻すなどの対処』を私なりに見つけることができたら、本サイトで報告させていただきます。 上田 |
>>4049 has その文章を書いたのは 5〜6年前なのでもう忘れてしまいましたが、 改めて考えてみました。 まず、 - ファイルに生パスワードを保存しておくのはよいことではない というのは納得していただけるかと思われます。 もちろん、デメリットを上回るメリットがあれば生パスワードを保存 してもよいのでしょうが、APOP については特にメリットらしきものは 見当たりません。 また、管理面からいっても、UNIX のシャドウパスワードと別管理でも よい場合もあるでしょうし、別管理になっても構わない場合もあるでしょう。 しかし、APOP では別管理にせざるをえません (選択の余地がない)。 > それではどんな方法だと納得できそうですか? APOP はサーバがクライアントにタイムスタンプを通知する際、サーバが 保持しているパスワードが - 生パスワード - パスワードの MD5 値 - パスワードの SHA-* 値 のいずれであるかを通知する、というのがわたしの考えです。 そうすれば、クライアント側はそれに応じて入力されたパスワードをそのまま 送るか、MD5 値を送るかを決定できます。また、サーバ管理者の方針により、 生パスワードで管理することもできるし、シャドウパスワードと共用にする こともできます。 なお、この部分はどうも叩かれ所のようで、この APOP 批判の文章を読んで 「こいつはわかってない」と評価している人を掲示板などで見かけます (わたしは何がどうわかってないのかが理解できないので、何ともいえない のですが)。 >>4050 上田 > 実は『シグナルハンドラを戻すなどの対処』部分がよく分かりませんでした。 > もしよろしければこの部分のコードを教えていただけないでしょうか? $SIG{CHLD} = 'DEFAULT'; です。 |
>>4051 68user > 管理面からいっても、UNIX のシャドウパスワードと別管理でも > よい場合もあるでしょうし、別管理になっても構わない場合もあるでしょう。 > しかし、APOP では別管理にせざるをえません (選択の余地がない)。 そうですね。使う側がやりたいように出来るよう、自由度を持たせておくという 考え方のツールは多い気がしますし。 > サーバが保持しているパスワードが > - 生パスワード > - パスワードの MD5 値 > - パスワードの SHA-* 値 > のいずれであるかを通知する 同感です。 > なお、この部分はどうも叩かれ所のようで、この APOP 批判の文章を読んで > 「こいつはわかってない」と評価している人を掲示板などで見かけます そうなんですか。私にもよくわかっていないようなので誰かに教えて欲しいです。 RFC2195とかにはchallenge-response authentication protocolを使うと サーバにパスワードを*平文で保存せずに済む*とあるようです。 ひょっとしてパスワードとは別の、もっと重要なことが理解できてない ということなのかもしれないですね…。 |
>>4052 has > RFC2195とかにはchallenge-response authentication protocolを使うと > サーバにパスワードを*平文で保存せずに済む*とあるようです。 なるほど。 http://www.lins.jp/~obata/imap/rfc/rfc2195ja.html 鍵付き MD5 ダイジェストを利用し、サーバ上に平文で秘密鍵が保管 される必要はないので、RFC 1734 で規定される POP3 の使用のための APOP より改善されたものからなるともいえる。 ということで、APOP はイマイチと自信を持っていえるようになりました。 該当ページもそのうち加筆・修正しておきます。 ところで RFC 2195 は IMAP と POP に CRAM を導入しよう、というものですが、 IMAP では CRAM-MD5 や CRAM-SHA に対応した実装がいろいろありますけど、 POP の方は普及してるんですかねぇ。 http://risky.cs.inf.shizuoka.ac.jp/~ynoguchi/index.php?POP%20(%20courier-pop%20) には (courier-pop は) courier-imap と同様,CRAM-MD5, CRAM-SHA に対応可能 だが,結局,そのプロトコルに対応するクライアントがない とありますし。 |
>>4053 68user 更新しました。 http://x68000.q-e-d.net/~68user/net/pop3-3.html 「シャドウパスワードと共通化できない」という批判は、CRAM-MD5 でも 共通化できないような気がしたので (crypt には salt があるけど、 CRAM-MD5 にはないし、CRAM-MD5 には ipad とか opad とかがあるけど、 crypt にはないから)、とりあえず削除してあります。 |
>>4047 やまさん 68userさんお返事遅くなりました。四苦八苦しましたけど ヒントいただいた通りプログラムを組みなおしたところ、 無事ログインできました。ありがとうございました。 |
なんとなくアンケートをとってみることにしました。 http://X68000.q-e-d.net/~68user/tmp/questionnaire.cgi |
「UNIX の部屋」を更新しました。 http://X68000.q-e-d.net/~68user/unix/ |
http://x68000.q-e-d.net/~68user/unix/pickup?freebsd-update 注意点は以下の通り。とある文言の、 <li>freebsd-updateの<li>、 HTTP 経由でファイルを\取得するので、の\、 これらは、誤植でしょうか? でも、ソースを見ると<LI>と大文字で書かれてるし・・・ |
>>4058 へにか ありがとうございます。修正しました。 誤植って言いはると void 氏みたいなので、タイプミスということでひとつ。 |
>>4059 68user > 誤植って言いはると void 氏みたいなので、タイプミスということでひとつ。 了解しました。気になったので、検索かけたら・・・ 何て言っていいのやら。 |
日記。 % mkdir dir % touch dir/file % chmod 400 dir % ls -l dir としたとき、dir/file を stat(2) する権限がないわけなので、Permission denied となる (Linux・Solaris では実際にそうなる)。 # http://x68000.q-e-d.net/~68user/unix/pickup?chmod ところが FreeBSD では何も表示されず (エラーも出ず)、exit status も 0 で正常終了してしまっている。 これを調べようと、FreeBSD 5.2.1-RELEASE の ls ソースを見てみる。 # http://www.jp.freebsd.org/cgi/cvsweb.cgi/src/bin/ls/ ずっと ls ってのは opendir して readdir して stat するものだと信じていたが、 実際には fts(3) -- traverse a file hierarchy http://www.freebsd.org/cgi/man.cgi?query=fts&manpath=FreeBSD+5.3-RELEASE+and+Ports&format=html を使っていて、上記のシステムコールは間接的にしか使用していなかった。 >>3773 68user で買った本を読むと、しっかり書いてあった。 この人の書く文章にはおもしろみのかけらもなく なんて文句言う前に、ちゃんと目を通すべきということか (全然読んでなかった)。 fts(3) は 4.4BSD から実装され、GNU 方面では glibc2 で採用された。glibc の マニュアルには BSD 4.4. fts ユーティリティは、将来の St -p1003.1-88 リビジョンに 含まれると期待されている。 と威勢のいいことが書いてあるが、少なくとも Solaris9 には実装されていない。 はじめて fts(3) を使ってみる。以下のプログラムで、stat できない場合エラーと 判断できている。FreeBSD の ls にはそれっぽい箇所があるにはあるが、その処理が うまく機能していないのか、あるいは謎の仕様なのか…。 ----- #include <stdio.h> #include <sys/types.h> #include <sys/stat.h> #include <fts.h> main(){ FTS *ftsp; char *path[2]={"dir", NULL}; ftsp = fts_open(path, FTS_PHYSICAL | FTS_NOCHDIR, NULL); if ( ftsp == NULL ){ perror("fts_open"); exit(1); } FTSENT *ftsentp; while (1){ ftsentp = fts_read(ftsp); if ( ftsentp == NULL ){ break; } struct stat *sp = ftsentp->fts_statp; printf("%c", sp->st_mode&S_IRUSR ? 'r' : '-'); printf("%c", sp->st_mode&S_IWUSR ? 'w' : '-'); printf("%c", sp->st_mode&S_IXUSR ? 'x' : '-'); printf("%c", sp->st_mode&S_IRGRP ? 'r' : '-'); printf("%c", sp->st_mode&S_IWGRP ? 'w' : '-'); printf("%c", sp->st_mode&S_IXGRP ? 'x' : '-'); printf("%c", sp->st_mode&S_IROTH ? 'r' : '-'); printf("%c", sp->st_mode&S_IWOTH ? 'w' : '-'); printf("%c", sp->st_mode&S_IXOTH ? 'x' : '-'); printf(" %d %s\n", sp->st_mode, ftsentp->fts_path); if ( ftsentp->fts_info == FTS_NS ){ perror("stat failed"); exit(1); } } exit(0); } ------ あと、 http://www.freebsd.org/cgi/man.cgi にて FreeBSD 5.3-RELEASE からは ports マニュアルも検索できるように なっていることに気づいた。これは大変素晴らしい。 |
>>4056 68user > なんとなくアンケートをとってみることにしました。 アンケートの受付を (11/27 の時点で) 終了しました。結果をお知らせします。 [質問] 68user's page で今後読みたいコンテンツがあれば選択してください (複数選択可)。 [選択肢] 1. UNIX コマンドのコンテンツ充実 2. UNIX howto (「〜するには?」集のようなもの) 3. UNIX インストール・サーバ構築 4. ネットワークプログラミングのコンテンツ充実 5. web と CGI についてのコンテンツ充実 (含 Java Servlet・EJB) 6. C 言語講座的なもの 7. 業務系システム構築講座 (設計・コーディング・DB) 8. プログラマや SE の仕事について思うことをつらつらと [結果] 回答総数 67 1. 36(17%) ************************************ 2. 42(20%) ****************************************** 3. 27(13%) *************************** 4. 29(14%) ***************************** 5. 13(06%) ************* 6. 14(06%) ************** 7. 18(08%) ****************** 8. 25(12%) ************************* [感想] 1・2 が多いのは予想していましたが、5・6 が少ないのは予想外でした。 5 は書きかけのコンテンツのまま放置してあるので、その辺の情報を今ほしい 人はここにはいないってことでしょうか。6 は世の中は意外と保守的で、仕事で いまだに C でごりごり書いている (書かされている) 人が多数いるに違いない と予想したのですが、はずれたようで。 あと、7 より 8 の方が多いのもちょっと不思議です。 頂いたコメントについてですが、 > div 開始タグより div 終了タグが圧倒的に多い とりあえず気づいたところは直しました。自分で確認して、あまりにも 閉じ側が多いので笑ってしまいました。 あと、 >>3951 ほんたか > 1.「h 1文字左に移動」がリストからはみ出ています。 も直しました。 アンケート結果は今後の参考にさせていただきます。ありがとうございました。 |
「ネットワークプログラミングの基礎知識」に HTTP クライアントを作ってみよう(5) - 認証編 - http://X68000.q-e-d.net/~68user/net/http-auth-1.html を追加しました。 |
こんにちは。 こちらのサイトに来るのは今日が初めてですが、内容が充実していて大変参考になるサイトですね。 今後も利用させて頂こうと思います。さっそくですが、xlibについて質問をさせてください。http://x68000.q-e-d.net/~68user/xprogram/xlib-1.html のxlib-1.c を cc -o xlib-1 xlib-1.c -I /usr/X11R6/include -lX11 -L /usr/X11R6/li のように実行したら、何にも出て来なかった。私が使っているのは red hat linux 8.0です。宜しくお願いします。 |
>>4064 sqh00 カレントディレクトリに xlib-1 というバイナリが生成されているか、 あるいは何かしらのエラーメッセージが出力されていると思いますので 確認してみてください。 |
カレントディレクトリに xlib-1 というバイナリが生成されているが、実行できない。このように、実行したら、何にも出て来なかった。 [root@dm1511 xlib]# xlib-1 bash: xlib-1: command not found |
>>4066 sqh00 カレントディレクトリにあるバイナリは % ./xlib-1 と実行してください (% はプロンプト)。 |
実行ができました。ありがとうございます。 |
「ネットワークプログラミングの基礎知識」に HTTP クライアントを作ってみよう(6) - Digest 認証編 - http://X68000.q-e-d.net/~68user/net/http-auth-2.html を追加しました。 ところで cnonce は選択平文攻撃への耐性を高める効果があるとかなんとか 知ったかぶって書いてしまいましたが、cnonce がないと具体的にどういう 攻撃ができるんでしょうかね。 差分解読法かなぁと思ったんですが、MD5 に差分解読法って有効なんでしょうか。 あるいは salt 的な意味合いがあるんでしょうか? いまいちイメージがわかない。 |
「ネットワークプログラミングの基礎知識」で勉強させていただいています。 kqueue の説明をみて早速いぢってみました。 サンプルでは kqueue() の戻り値に対して、終了時の処理が何もされていません。 man で調べたたところ、kqueue() の戻り値はファイルデスクリプタと記されています。 init kq = kqueue(); close(kq); としても、close の戻り値が -1 で閉じることができませんでした。 なので、 init kq = kqueue(); close(kq); init kq = kqueue(); close(kq); とすると、kq は 1 回目が 9、2 回目が 10 といったようにインクリメントされてしまいました。 fcntl で kq の情報を取得しようとしてもすべての戻り値は -1 でした。 なんとなく、ファイルデスクリプタとして扱えていないような気がします。 当方は Mac OS X 10.3.7(BSD 4.4 ベースの Darwin) です。 本当の BSD なら、close できるものなのでしょうか。 もし、kqueue の説明を追加する予定があるようでしたら、close または、それに代わる処理も追加してもらえると大変助かります。 |
>>4070 たなか > 本当の BSD なら、close できるものなのでしょうか。 FreeBSD 5.2-RELEASE では close(2) できました。ちなみに カーネルには queue 用を close するコードも含まれています。 詳しくないので事情はわかりませんが、Mac OS X (Darwin?) の 問題ではないかと思います。 > close または、それに代わる処理も追加してもらえると大変助かります。 echo サーバばかり作っていると終了処理がおろそかになっていけませんね。 「quit」を送ると終了するようにするなど、何かしら考えたいと思います。 |
>>4071 68user どうもありがとうございます。 >> 本当の BSD なら、close できるものなのでしょうか。 > FreeBSD 5.2-RELEASE では close(2) できました。ちなみに > カーネルには queue 用を close するコードも含まれています。 手元に BSD が動作するマシンがないので、実験できませんでした。 Darwin の問題ですね。Apple に連絡してみます。 下のコードを実行すると次のような結果となります。 kqueue : 3 close(3) : -1 close: Bad file descriptor kqueue : 4 close(4) : -1 close: Bad file descriptor ------------------------------------------------ #include <stdio.h> #include <sys/types.h> #include <sys/event.h> #include <sys/time.h> #include <unistd.h> int main() { int kq; int ret; kq = kqueue(); printf("kqueue : %d?n", kq); if (kq == -1) { perror("kqueue"); } else { ret = close(kq); printf("close(%d) : %d?n", kq, ret); if (ret == -1) { perror("close"); } } kq = kqueue(); printf("kqueue : %d?n", kq); if (kq == -1) { perror("kqueue"); } else { ret = close(kq); printf("close(%d) : %d?n", kq, ret); if (ret == -1) { perror("close"); } } return 0; } ------------------------------------------------ |
サーバがHP-UX11.00で、Bシェルでシェルを書いています。 シェル中で、「ls *.txt」を実行しています。 "*.txt"が存在しない場合、エラーが出力されるので、 「ls *t.xt > /dev/null 2>&1」で、エラーを出さないよう にしました。 そこで、lsの処理に"grep -v"を追加し、"*.txt"がない 状態にすると「*.txt がみつかりません。」がでます。 ls *t.xt | grep -v "kekka" > /dev/null 2>&1 エラーがでないようにするにはどうしたらよいのですか。 |
ここで質問する人のブラウザには、 「UNIX・ネットワークに関する一般的な質問は受け付けていません。」 という一文は映らないのだろうか? >>4073 さいさん 最終的にどうしたいのか良く判らないが、取りあえずはこれで。 ls *txt 2>/dev/null | grep -v "kekka" |
>>4074 zsh ありがとうございます。 実際にしたいことは、 シェルを実行した際、「*.txt がみつかりません。」を 標準出力したくないのと、戻り値の判定をしたいのです。 ls *.ldif | grep -v "kekka" > /dev/null 2>&1 if [ $? -ne 0 ] ; then echo "Text File Nothing Today" exit 0 fi |
>>4075 さいさん すみません。 間違いがありました。 実際にしたいことは、 シェルを実行した際、「*.txt がみつかりません。」を 標準出力したくないのと、戻り値の判定をしたいのです。 ls *.txt | grep -v "kekka" > /dev/null 2>&1 if [ $? -ne 0 ] ; then echo "Text File Nothing Today" exit 0 fi |
>>4076 さいさん 結果的にファイルの有無を確認したいんですよね? だとすれば、戻り値のチェックよりも下記のようにしては如何でしょうか? set -- `ls *txt 2>/dev/null | grep -v "kekka"` if [ $# -eq 0 ] ; then echo "no file." fi ※:シェルに引数を与えている場合等は考慮が必要です。 |
>>4077 zsh ありがとうございます。 set -- `ls *txt 2>/dev/null | grep -v "kekka"` の 「set -- `ls 」 の使い方教えてください。 どのような意味なのですか |
set -- で引数(定位置パラメタだっけ?)を書き換えることが出来ます。 今回の場合は、 ls *txt 2>/dev/null | grep -v "kekka" の出力で置き換える事になりますので、 $#で上記コマンドの結果出力されたファイル数を参照できます。 |
>>4079 zsh お礼遅くなって申し訳ありません。 ありがとうございます。 >set -- >で引数(定位置パラメタだっけ?)を書き換えることが出来ます。 参考本とかで調べてます。 |
ご存知の方おられましたら、ご教授ください。 環境OSは、Win2000です。 OpenSSLライブラリを利用したDER形式の鍵ファイルの読み書き方法を実装方法が わかりません。i2d_RSAPrivateKey、d2i_RSAPrivateKeyを利用し、ファイル出力 をしてみましたが、_fp付きはエラーです。(_bio付きはOK) また、ここで出力された鍵ファイルは、OpenSSLでは、暗号/復号可能です。 しかし、他社製品(RSA BSAFE)では、鍵ファイル読み込みエラーとなります。 rsaコマンド等で変換作業を行うと読み込み可能となり、暗号・復号ができます。 なんだか理解できません。 以上、宜しくお願い致します。 |
>>4081 しょしん 暗号に関する一般的な質問も受け付けていません。 ■暗号技術【ROUND2】■ http://pc5.2ch.net/test/read.cgi/tech/1088530204/l50 などで質問してください。 - OpenSSL のバージョンくらい書きましょう。 - 何を知りたいのか不明。_bio 付きで出力して、rsa コマンド等で 変換して、RSA BSAFE で読み込めているんなら別にいいのでは。 例えば「rsa コマンドに頼りたくない」「なぜ rsa コマンドを 使わなければいけないのかわからないので、解説してほしい」 などと書くべき。 - 単に _fp 付きはエラーと言われても、「コーディングミスでは?」 くらいしか返す言葉はありません。つーか、ソースくらい提示しましょう。 |
内容不備&質問場所違いでした。 大変失礼しました。 撤収します。 |
CGIでmkdirとかmountとかを呼び出す方法をご教授願います。 サーバー上でプログラムを実行させたいのですが、動作しませんでした。 C言語にてCGIプログラムを作っています。 execveを使用してもうまく動作しませんでした。 ------- test.c (test.cgi) ----------------------- #include <stdio.h> int main() { char *argv[3]; argv[0]="/bin/mkdir"; argv[1]="test"; argv[2]=NULL; int pid=fork(); if(pid==0){ execve(argv[0],argv,NULL); perror("execve"); exit(0); } return 0; } |
↓↓ #include <unistd.h> が抜けていました。 よろしくお願いします。 |
はじめまして。 いつも「UNIXの部屋」を利用させていただいています。 awkコマンドのところですが、誤字がありましたのでお知らせさせていただきました。 **************************************************************** 特殊なパターンとして BEGIN と END がある。BEGIN は最初に実行され、END は最後に実行される。 % ls -l | awl 'BEGIN { print "START!"} {total+=$5; print $9} END {print "size total="total} ' **************************************************************** 1つ目のパイプの後の「awk」が「awl」になっています。 「awkのエイリアスです。」なんていわれたら、どうしようもありませんが…。 取り急ぎ、ご連絡までに… |
>>4086 たらい 修正いたしました。ご指摘ありがとうございました。 http://X68000.q-e-d.net/~68user/unix/pickup?awk |
ライセンスについて質問です。 このサイトにあるコードはフリーソフトウェアと考えてよいでしょうか。 チュートリアルサイトなのでコードを自由に利用してよいだろうとは思ったのですが、 念のため確認させてください。 具体的にはecho-server-select.cを参考にしながらプログラムを書いたのですが、 将来それをフリーソフトウェアとして配布したいと考えています。 問題ないですよね? 問題あるなら空で書けるように修行してやり直すことになるのですが…。 ちなみに作っているものはこれ http://humming.dip.jp/bardic/ でネットゲームのようなものです。 よろしくお願いします。 |
>>4088 tansy > 将来それをフリーソフトウェアとして配布したいと考えています。 > 問題ないですよね? はい、問題ありません。ただしエラーチェックが甘めなので、それを踏まえた上で お使いください。 ついでなのでライセンスを明確にしたいと思います。 わたしが書いたプログラムは、特に明記していない場合は修正 BSD ライセンスと します (現時点で修正 BSD ライセンス以外のライセンスを適用しているプログラム はありません)。 わたしが書いた文章は、フリーではありません。ただし (言うまでもありませんが) 著作権法における引用は可です。 |
>>4089 68user 修正BSDライセンスであること了解しました。 > ただしエラーチェックが甘めなので、それを踏まえた上でお使いください。 了解です。 ありがとうございました。 |
はじめまして。今卒業研究に必死に取り組んでいるんですけども、 ソケットプログラミングがよく分かりません・・・ sendやrecvなどを使って、更新されていくデータを一定時間 ずーっと送信、もしくは受信ってできますか? 研究室も誰もいないし、聞けるのはみなさんしかいません。うう。 どうかお願いします。 PS.焦っているので、他の掲示板などでも同様の書き込みをするかもしれません。 ここが最初ですが、もし他の掲示板から何かいいアドバイスをいただけましたら、 すぐに反映させていきたいと思います。よろしくお願いします。 |
亜紀さん 質問の内容が漠然としているので、ちょっと答えずらいのですが。。。 一定時間ずっと、送信もしくは受信することはできますよ。 まあ、ソケットはありふれたものなので、インターネット上を検索すれば、 ソースコードの例は簡単に見つかると思いますよ。 ソケット、socket、ソースなどのキーワードで検索すれば簡単に見つかるかも。 焦る気持ちはわかりますが、同じ質問を複数の掲示板に書き込む行為は良く ないので、やめたほうがいいですね。 では。 |
JAVA から cシェルを実行したいのですが どのように記述すればよいのでしょうか。 Runtime rt = Runtime.getRuntime(); String[] command = {"/root/scripts/t.csh"} ; Process process = rt.exec(command); と記述しておりますが、実行できず困っています。 |
UNIXのシェルスクリプトについて教えて下さい。 OSは、HP-UX11.00です。 ファイル中に存在するある文字列をsedを使用して置換して いるのですが、sedで置換を行うとき条件を指定して実行する ことはできるのでしょうか。 id: u=aaaa.bbbb,o=co.jp,o=1234,code=vip aaaaaa,bbbb,code=vip,code=ip bbbbb,bbbb id: u=aaaa.bbbb,o=co.jp,o=1234,code=vip aaaaaa,bbbb,code=vip,code=ip bbbbb,bbbb id: u=aaaa.bbbb,o=co.jp,o=1234,code=vip aaaaaa,bbbb,code=vip,code=ip bbbbb,bbbb id: u=aaaa.bbbb,o=co.jp,o=1234,code=vip sed 's/code=vip$/code=normal/g' ファイル名 とすると「code=vip」がある行に対して置換が行われます。 先頭が、"id: "から始まる行のみ「code=vip」を「code=normal」に 置換したいのですが、sed1回で可能でしょうか。 それとも、作り込みが必要でしょうか。 |
Solaris8のcshについて教えて下さい。 nawkを使用しているのですが、1行での表記が長いので手頃なところで改行 して見易いように複数行にしたいのですが、その場合、これは、1行の処理 ですと認識させたいのですが、どのようにすればよいのですか。 ¥、&、$とかつけてみたのですが、「Unmatched '」がでてしまいます。 お願いします。 #!/usr/bin/csh # set sys_no = "99" set aaa=`nawk -v NO=$sys_no -F":" '/^[ \t]*#START/,/^[ \t]*#END/ \ { if (substr($1,1,1) != "#" && substr($1,1,2) == NO) print $2 }' list.txt` echo $aaa |
>>4094 とも sed -e 's/^\(id.*code=\)vip/\1nomal/' file とか sed -e '/^id/ { s/code=vip$/code=normal/ }' file あたりでできます。 >>4095 ばんじょう 「\\」でいけたと思います。 ・・・正直cshはやめた方が良いと思いますが・・・ |
>4096 >「\\」でいけたと思います。 でやってみましたが無理でした。 動きはしましたが、nawk内の条件が無視され全て取り出されました。 ふと、もう1個ふやしたらどうなるのだろうと、「\\\」でやって みたところ上手くいきました。いった模様です。 しかし、変ですね。怖い環境、怖いcshだと。 >・・・正直cshはやめた方が良いと思いますが・・・ ということは、shとかbashですか。 Solarisは、bashが多いですが・ |
>>4096 zsh >sed -e 's/^\(id.*code=\)vip/\1nomal/' file では、上手く行きました。 >sed -e '/^id/ { s/code=vip$/code=normal/ }' file では、 sed: 関数 /^id:/ { s/code=vip$/code=normal/ } はパースできません。 となりました。 |