今週末は鎌倉の海岸で海水浴予定だったが、あいにくの天気に見舞われ、新江ノ島水族館に行き先を変更。
朝一の館内は、そんなに人も混んでおらずそこそこ展示物を楽しめたが、イルカショーの後のころには、ペンギンもカメタッチも人混み過ぎてあまり楽しめず。
イルカショーは、へんちくりんな格好した人間のパフォーマンスが目に付き、肝心のイルカの芸が迫力がない。でも、それはあくまで大人目線で、ムスメは一人で拍手しながら大興奮。
正直、イルカショーに限っていえば、近場の品川アクアスタジアムの方が数倍は楽しい。明らかに客の歓声の数も大きさも違った。
でも展示物はこちらの方が多いし、ムスメがもう少し大きくなってゆっくり回れるようになったら、もう一度来てみようか。
2009年7月14日
apacheのサイト証明書を設定 - 調査
確認環境
手順
①証明書要求の作成
サイト証明書を発行してもらうため、証明書要求をベリサイン等の認証機関に送付する。もしくは、独自認証局で自分でサイト証明書を作成する。
(1)サイト証明書の配置と設定
scp等でサイト証明書を/root/www33.atwiki.jp/site_cert.pemに配置
- Debian(etch)
- apache2-mpm-prefork 2.2.3-4+etch6
手順
①証明書要求の作成
~# cd ~# mkdir www33.atwiki.jp ~# cd www33.atwiki.jp ~/www33.atwiki.jp# ~/www33.atwiki.jp# openssl req -new -keyout site_key.pem -out site_csr.pem ... Enter PEM pass phrase: Verifying - Enter PEM pass phrase: ... Country Name (2 letter code) [AU]:JP State or Province Name (full name) [Some-State]:KANTO Locality Name (eg, city) []:KANAGAWA Organization Name (eg, company) [Internet Widgits Pty Ltd]:NONE Organizational Unit Name (eg, section) []:NONE Common Name (eg, YOUR name) []:www33.atwiki.jp Email Address []:NONE Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []:tekitou An optional company name []: ~/www33.atwiki.jp#②証明書要求の送付
サイト証明書を発行してもらうため、証明書要求をベリサイン等の認証機関に送付する。もしくは、独自認証局で自分でサイト証明書を作成する。
(1)サイト証明書の配置と設定
scp等でサイト証明書を/root/www33.atwiki.jp/site_cert.pemに配置
~# ls www33.atwiki.jp/site_cert.pem www33.atwiki.jp/site_cert.pem(2)サイトキーからパスワードを削除
~# openssl rsa -in ./www33.atwiki.jp/site_key.pem -out ./www33.atwiki .jp/site_key.pem.nopasswd(3)apacheの定義ファイルで以下を設定(SSLサイト作成の詳細は割愛)
SSLCertificateFile "/root/www33.atwiki.jp/site_cert.pem" SSLCertificateKeyFile "/root/www33.atwiki.jp/site_key.pem.nopasswd"(4)apacheを再起動する
~# /etc/init.d/apache2 restart
2009年7月6日
[C言語] RPCサンプルプログラム - 調査
参考資料(http://www.cs.tsukuba.ac.jp/~yas/sie/cdsoft-2005/2006-01-20/index.html)を元にRPCサンプルプログラムを動作させてみた際のメモ。
ソースコードほかの入手
$ wget http://www.cs.tsukuba.ac.jp/~yas/sie/cdsoft-2005/2006-01-20/ex/dirlist.x $ wget http://www.cs.tsukuba.ac.jp/~yas/sie/cdsoft-2005/2006-01-20/ex/dirlist_server.c $ wget http://www.cs.tsukuba.ac.jp/~yas/sie/cdsoft-2005/2006-01-20/ex/dirlist_client.c $ wget http://www.cs.tsukuba.ac.jp/~yas/sie/cdsoft-2005/2006-01-20/ex/Makefile
コンパイル
$ make rpcgen -C dirlist.x gcc -g -DDEBUG -c -o dirlist_clnt.o dirlist_clnt.c gcc -g -DDEBUG -c -o dirlist_client.o dirlist_client.c gcc -g -DDEBUG -c -o dirlist_xdr.o dirlist_xdr.c gcc -g -DDEBUG -o dirlist_client dirlist_clnt.o dirlist_client.o dirlist_xdr.o -lnsl gcc -g -DDEBUG -c -o dirlist_svc.o dirlist_svc.c gcc -g -DDEBUG -c -o dirlist_server.o dirlist_server.c gcc -g -DDEBUG -o dirlist_server dirlist_svc.o dirlist_server.o dirlist_xdr.o -lnsl
実験その1 単純動作 ※サーバとクライアントで端末を分けること
<サーバ側>
$ ./dirlist_server
<クライアント側>
$ /usr/sbin/rpcinfo -p localhost プログラム バージョン プロトコル ポート 100000 2 tcp 111 portmapper 100000 2 udp 111 portmapper 100024 1 udp 1010 status 100024 1 tcp 1013 status 536875011 1 udp 50085 536875011 1 tcp 32775 $ ./dirlist_client localhost /usr errno: 0 (Success) . .. share (後略)
ふーん。
実験その2 サーバを強制停止してみる
<サーバ側>
$ ./dirlist_server ^C (※強制停止) $
<クライアント側> $ /usr/sbin/rpcinfo -p localhost プログラム バージョン プロトコル ポート 100000 2 tcp 111 portmapper 100000 2 udp 111 portmapper 100024 1 udp 1010 status 100024 1 tcp 1013 status 536875011 1 udp 50085 536875011 1 tcp 32775 $ ./dirlist_client localhost /usr localhost: RPC: Remote system error - Connection refused
サーバが死んだが、portmapの情報は生きているのね
実験その3 サーバを再起動してみる
<サーバ側>
$ ./dirlist_server
<クライアント側> $ /usr/sbin/rpcinfo -p localhost プログラム バージョン プロトコル ポート 100000 2 tcp 111 portmapper 100000 2 udp 111 portmapper 100024 1 udp 1010 status 100024 1 tcp 1013 status 536875011 1 udp 42517 536875011 1 tcp 32791 $ ./dirlist_client localhost /usr errno: 0 (Success) . .. share (後略)
あぁ。ポート番号が再登録されているね、、消せないのかな?
実験その4 portmapのポート番号を消してみる
<クライアント側>
$ su - Password: ********** # rpcinfo -d 536875011 1 # rpcinfo -p localhost プログラム バージョン プロトコル ポート 100000 2 tcp 111 portmapper 100000 2 udp 111 portmapper 100024 1 udp 1010 status 100024 1 tcp 1013 status # exit $ ./dirlist_client localhost /usr localhost: RPC: Program not registered $
なるほどね。再登録は?
実験その5 portmapのポート番号を再登録してみる
<クライアント側>
$ su - Password: # rpcinfo -p localhost プログラム バージョン プロトコル ポート 100000 2 tcp 111 portmapper 100000 2 udp 111 portmapper 100024 1 udp 1010 status 100024 1 tcp 1013 status # cat test 536875011 1 udp 42517 536875011 1 tcp 32791 # cat test | pmap_set # rpcinfo -p localhost プログラム バージョン プロトコル ポート 100000 2 tcp 111 portmapper 100000 2 udp 111 portmapper 100024 1 udp 1010 status 100024 1 tcp 1013 status 536875011 1 udp 42517 536875011 1 tcp 32791 # exit
出来た。でもこれはサーバが動作継続していたことが前提だ。サーバプログラム自身で削除、再登録等の状況にマッチした登録って出来ないのか?→多分rpcgebが作るサーバスケルトンを改造しないとできなさそうだ。また今度。
ソースコードほかの入手
$ wget http://www.cs.tsukuba.ac.jp/~yas/sie/cdsoft-2005/2006-01-20/ex/dirlist.x $ wget http://www.cs.tsukuba.ac.jp/~yas/sie/cdsoft-2005/2006-01-20/ex/dirlist_server.c $ wget http://www.cs.tsukuba.ac.jp/~yas/sie/cdsoft-2005/2006-01-20/ex/dirlist_client.c $ wget http://www.cs.tsukuba.ac.jp/~yas/sie/cdsoft-2005/2006-01-20/ex/Makefile
コンパイル
$ make rpcgen -C dirlist.x gcc -g -DDEBUG -c -o dirlist_clnt.o dirlist_clnt.c gcc -g -DDEBUG -c -o dirlist_client.o dirlist_client.c gcc -g -DDEBUG -c -o dirlist_xdr.o dirlist_xdr.c gcc -g -DDEBUG -o dirlist_client dirlist_clnt.o dirlist_client.o dirlist_xdr.o -lnsl gcc -g -DDEBUG -c -o dirlist_svc.o dirlist_svc.c gcc -g -DDEBUG -c -o dirlist_server.o dirlist_server.c gcc -g -DDEBUG -o dirlist_server dirlist_svc.o dirlist_server.o dirlist_xdr.o -lnsl
実験その1 単純動作 ※サーバとクライアントで端末を分けること
<サーバ側>
$ ./dirlist_server
<クライアント側>
$ /usr/sbin/rpcinfo -p localhost プログラム バージョン プロトコル ポート 100000 2 tcp 111 portmapper 100000 2 udp 111 portmapper 100024 1 udp 1010 status 100024 1 tcp 1013 status 536875011 1 udp 50085 536875011 1 tcp 32775 $ ./dirlist_client localhost /usr errno: 0 (Success) . .. share (後略)
ふーん。
実験その2 サーバを強制停止してみる
<サーバ側>
$ ./dirlist_server ^C (※強制停止) $
<クライアント側> $ /usr/sbin/rpcinfo -p localhost プログラム バージョン プロトコル ポート 100000 2 tcp 111 portmapper 100000 2 udp 111 portmapper 100024 1 udp 1010 status 100024 1 tcp 1013 status 536875011 1 udp 50085 536875011 1 tcp 32775 $ ./dirlist_client localhost /usr localhost: RPC: Remote system error - Connection refused
サーバが死んだが、portmapの情報は生きているのね
実験その3 サーバを再起動してみる
<サーバ側>
$ ./dirlist_server
<クライアント側> $ /usr/sbin/rpcinfo -p localhost プログラム バージョン プロトコル ポート 100000 2 tcp 111 portmapper 100000 2 udp 111 portmapper 100024 1 udp 1010 status 100024 1 tcp 1013 status 536875011 1 udp 42517 536875011 1 tcp 32791 $ ./dirlist_client localhost /usr errno: 0 (Success) . .. share (後略)
あぁ。ポート番号が再登録されているね、、消せないのかな?
実験その4 portmapのポート番号を消してみる
<クライアント側>
$ su - Password: ********** # rpcinfo -d 536875011 1 # rpcinfo -p localhost プログラム バージョン プロトコル ポート 100000 2 tcp 111 portmapper 100000 2 udp 111 portmapper 100024 1 udp 1010 status 100024 1 tcp 1013 status # exit $ ./dirlist_client localhost /usr localhost: RPC: Program not registered $
なるほどね。再登録は?
実験その5 portmapのポート番号を再登録してみる
<クライアント側>
$ su - Password: # rpcinfo -p localhost プログラム バージョン プロトコル ポート 100000 2 tcp 111 portmapper 100000 2 udp 111 portmapper 100024 1 udp 1010 status 100024 1 tcp 1013 status # cat test 536875011 1 udp 42517 536875011 1 tcp 32791 # cat test | pmap_set # rpcinfo -p localhost プログラム バージョン プロトコル ポート 100000 2 tcp 111 portmapper 100000 2 udp 111 portmapper 100024 1 udp 1010 status 100024 1 tcp 1013 status 536875011 1 udp 42517 536875011 1 tcp 32791 # exit
出来た。でもこれはサーバが動作継続していたことが前提だ。サーバプログラム自身で削除、再登録等の状況にマッチした登録って出来ないのか?→多分rpcgebが作るサーバスケルトンを改造しないとできなさそうだ。また今度。
2009年7月5日
pmap_getport(2)
ポートマッパ(portmap)からRPCサービスのポート番号を取得するpmap_getport関数の使い方。
用例
上記は、独自プロトコルのポート取得にportmapを使う例になっている。本来、connectなんて書かずに、キチンとRPCの関数を使ってRPCプロトコルで通信すべきなんだろうが。
用例
... addr.sin_port = htons(111); /* (1) portmapのポート番号を設定 */ if ((addr.sin_port = htons(pmap_getport(&addr, 0x20000000, 1, IPPROTO_TCP))) == 0) { /* (2) 使用したいRPCサービスのポート番号で置き換え */ perror("pmap_getport"); exit(1); } /* (3) ポート番号が置き換わったところで、コネクトする */ if (connect(fd, (struct sockaddr *)&addr, sizeof(addr)) < 0){ perror("connect"); exit(1); }備考
上記は、独自プロトコルのポート取得にportmapを使う例になっている。本来、connectなんて書かずに、キチンとRPCの関数を使ってRPCプロトコルで通信すべきなんだろうが。
pmap_set(2)
ポートマップ(portmap)にRPCサービスを登録するpmap_set関数。
用例
用例
pmap_unset(0x20000000, 1); if (pmap_set(0x20000000, 1, IPPROTO_TCP, ntohs(saddr.sin_port)) != 1) { perror("pmap_set"); exit(1); }
getsockname(2)
soctnameを取得する関数。
用例
manページを眺めても使い方が良く分かんらんかった。試行錯誤の上、上記に到達。
用例
len = sizeof(saddr); if (getsockname(fd1, (struct sockaddr *)&saddr, &len) != 0){ perror("getsockname"); exit(1); } printf("port number is %d.\n", ntohs(saddr.sin_port));メモ
manページを眺めても使い方が良く分かんらんかった。試行錯誤の上、上記に到達。
登録:
投稿 (Atom)