タグ

ブックマーク / x68000.q-e-d.net/~68user (27)

  • X アプリケーション工房

    X アプリケーション工房 多くの UNIX には C コンパイラが標準で付いており、 いろいろなアプリケーションを自作することができます。 しかし、X Window System 上で動く アプリケーションとなると、一段敷居が高くなってしまいます。 ここでは、X アプリケーションを作る方法をいくつか紹介します。 とてもじゃないけど、詳細なリファレンスは書けませんし、 書くつもりもありません。雰囲気を掴んだら専門書を買って勉強して下さい。 Xlib 編 (1) 簡単な X アプリケーションサンプル Xlib 編 (2) キー入力・マウス入力・その他イベント Xlib 編 (3) 複数のウィンドウ Xlib 編 (4) ダブルバッファリング 各項で解説したサンプルプログラム。tarball に添付してある Makefile を使用して % make とするか、あるいは % cc -o xlib

  • 68user's page - CGI の小部屋

    NIC のデータベースから検索します。 環境変数を見てみよう こちらが得ることのできるあなたの情報(IPアドレス、OS、ブラウザ)を表示します。 意味がわかっているものについては説明をつけました。 値がセットされている環境変数だけを表示 全ての環境変数を表示 ⇒ 詳しい説明へ ソースを表示してみよう URL (http://www.goo.ne.jp/index.html など) を入力してください。 相手先 web サーバに HTTP リクエストを送り、データを取得します。 アクセスすると新しいウィンドウが無限に開いてしまうとか、ブラウザが落ちてしまうと いったページがあります。そのようなページはこの CGI を使ってソースをチェックしてください。 念のため言っておきますが、CGI のソースを表示するわけではありません。 ヘッダとボディ ヘッダのみ ボディのみ HTML 形式で出力 プレ

  • UNIXの部屋

    UNIX/Linuxの部屋 FreeBSD・Solaris・Red Hat Linux・Fedora・CentOS・HP-UX を使った上で気づいたこと・調べたことをまとめました。 この web 内についての引用・リンク・紹介などの注意点は サイトへのリンクについて をお読み下さい。

  • web と CGI のひみつ

    ◎ ここは書きかけなのですが、気力がなくなってほったらかしになっています。 推敲もろくにしていないので、読む場合は そのつもりでどうぞ。 このコンテンツは、CGI プログラムを作りたい人を対象に書きました。 簡単な BBS などの作成を通して、CGI プログラムのノウハウを説明します。 チュートリアル編 好きな言語を選んで読んで下さい。概要はいずれも同じです。 perlCGI プログラムのはじめの一歩 掲示板を作ろう (1) 掲示板を作ろう (2) C言語編 CGI プログラムのはじめの一歩 ソース一覧 以下のサンプルプログラムは、各項で解説したものをまとめたものです。 サンプルプログラムの動作チェックは、FreeBSD 3.3-RELEASE、apache-1.3.9、 perl 5.005_05、ruby-1.4.3 で行いました。 実行環境を持っていないので、Windows

  • SEGA BBS 過去ログ

    SEGA BBS 過去ログ 1997年5月ごろから1998年3月ごろまでの SEGA BBS の過去ログです。 なお、1998年3月以降のログは持っていません。 ちなみに archive.org に Planet Cafe トップページ・ 伝言板トップページ が残ってます。 データは圧縮して保管しており、リクエストがあるたびに CGI で随時展開してます。 圧縮時 103 MB、展開すると 1GB は越えるんじゃないかと思います。 このページを公開した1998年10月時点でこのデータを処理するのは少し大変でしたが、 今となっては小さなデータですね。

  • 関数一覧

    この項では、ネットワークプログラムで使用する perl の関数を解説します。 関数には、perl の組み込み関数 (socket・bind など) と、Socket モジュールに よって設定される関数 (inet_aton・sockaddr_in など) があります (use Socket と書いてある関数)。 C の関数を知りたいときはオンラインマニュアルを見て下さい。 perl の関数とは引数の数が違うこともありますが、考え方はほぼ同じです。 また、定数は Socket モジュールによって設定されていますが、 実際は /usr/include/sys/socket.h で設定されている値が そのまま使われています。 おさらいしておくと、 クライアント getservbyname でサービス名からポート番号を取得 inet_aton で接続先のホスト名を IP アドレスに変換 socka

  • Java で HTTP クライアントを作ってみよう (3)

    Java で HTTP クライアントを作ってみよう (3) Java が Basic 認証・Digest 認証に対応したのは (おそらく) Java 1.2 からと思われます。 ただし Digest 認証については Proxy 対応などに不備があったようで、J2SE SDK 1.4 にて Sun 曰く「auth-int を除くすべての機能を提供」というレベルになったようです。 ただし Digest 認証の auth-int には J2SE SDK 5.0 でも未対応です。 取得する URL は当ページ Basic 認証のサンプルページ Digest 認証のサンプルページ とします。いずれも、ユーザ名は「hoge」パスワードは「fuga」となっています。 HttpClientHttpURLConnectionAuth.java 14: URL url = new URL("http://X6

  • RSA で暗号化してみよう (1)

    ライブラリで RSA を実現 OpenSSL は SSL/TLS だけのライブラリではありません。 SSL/TLS を実装する上で必要な RSA や素数を扱うための機能もライブラリ化されています。 これを利用して、RSA による暗号化・復号化を行いましょう。 なお、ページを書くにあたり、以下のページを参考にしました。 特に「はやわかり RSA」から、拡張ユークリッドの互除法」の数式を拝借させていただきました。 作者の方々に感謝します。 はやわかり RSA RSA暗号体験入門 プログラム概要 このプログラム rsa-1.c は、 RSA 鍵を生成 平文を秘密鍵を用いて暗号化し、暗号文を生成 暗号文を公開鍵で復号化し、平文に戻す もともとの平文と、復号化した平文を比較し、一致することを確認 という機能を持ちます。 コンパイル方法と実行例を以下に示します。 % cc -o rsa-1 rsa-

  • TCP/IP と OSI 参照モデル

    これは、国際標準化機構 (ISO) が異なるシステム間接続の標準を定めようと、 OSI (Open Systems Interconnection) というネットワーク構造の設計方針を決めたものです。 その中に出てくるのが上記の OSI 参照モデルです。 OSI は政府 (特に欧州)・学者・企業がこぞって支持した規格でしたが、 実際にはあまり普及しませんでした。 理由としては、実装を考慮せずに机上で決められた規格であること、 トップダウンの中央集権的な規格であったこと、 政治的なかけひきで規格策定が進まなかったこと、 安価で入手しやすい実装がなかったこと、 などがあるのかもしれません。 一方、TCP/IP は ARPAnet から発展したプロトコルです。 4.2BSD で一般的に利用できるようになり、RFC によるゆるやかな規格と インターネットの普及に伴い爆発的な発展を遂げました。 AR

  • tcpdumpでプロトコルを解析してみよう

    もっと楽にプロトコルを理解したい RFC を読むのはめんどくさいです。って、 そんなこと言っちゃうと怒られるかもしれませんが、 特にプロトコルのおおまかな流れをわかっていない場合、 RFC を読んでも「なんのこっちゃ?」となりやすいです。 日語訳があればまだしも、英文を読むのは非常に苦痛です。 「Netscape Navigator は今どういう HTTP プロトコルを送っているのかな」 とか「POP3 サーバはどういうレスポンスを返しているのだろうか」 と思ったことはありませんか? 「それさえわかれば楽にプロトコルを理解できるのに…」。 そういうときは tcpdump を使って調べることができます。 tcpdumpとは? tcpdump というのは、ネットワーク上を流れるデータを モニタリングするツールで、TCP、UDP、IP、ICMPなどの各種 プロトコルに対応しています。local

  • HTTP proxy サーバを作ってみよう

    HTTP proxy サーバ IO::Socket、IO::Select モジュールを使って、個人用 HTTP proxy サーバを作ってみました。 User-Agent や Referer などの書き換え、コンテンツの書き換えを目的として作り始めましたが、 現時点では中継機能しか実装されていません。proxy の雛型としてどうぞ。 % ./http-proxy.pl とすると、ポート 8080 を listen しますので、ブラウザの proxy 設定を localhost:8080 にしてください。なお、keep-alive と SSL は未対応で、 メソッドは GET・POST のみ実装されています。 http-proxy.pl 1: #!/usr/local/bin/perl 2: 3: # $Id: http-proxy.pl,v 1.2 2003/05/17 14:31:02

  • SSL/TLS でアクセスしてみよう (1)

    SSL とは SSL (Secure Socket Layer protocol) とは「セキュリティ機能付き HTTP」のことです。 オンラインショッピングサイトで住所・氏名などの個人情報を入力する際、 「このページは暗号化されています」 などとダイアログが表示されることがありますが、 そのとき「http://....」という URL ではなく 「https://....」という URL にアクセスしているはずです。 このとき使用されているプロトコルが SSL です。 SSL を使用しているかどうかは、右図のようなブラウザ右下の鍵のマークを見てもわかります。 鍵がきっちりはまっているのは SSL を使用しているということです。 一方、鍵が外れている状態は SSL を使用していない、ということです。 SSL を使用することによって、以下の効果があります。 盗聴防止 改竄防止 なりすまし防止

  • SSL-TLS の導入 (1)

    全体の流れ まず、SSL/TLS を導入するために何が必要なのかをまとめておきます。 それぞれの作業を「誰が」行うのかを意識してください。 サーバ管理者が RSA 秘密鍵を生成します。 サーバ管理者が RSA 秘密鍵を元に CSR (Certificate Signing Request: 証明書要求) ファイルを生成し、認証局に送付します。 認証局が受け取った CSR を元にサーバ証明書を生成し、サーバ管理者に送付します。 サーバ管理者は受け取ったサーバ証明書を Web サーバに組み込みます。 登場人物は「サーバ管理者」と「認証局」がいます。 「サーバ管理者」は「Web サーバに SSL/TLS を導入したい人」です。 「認証局」は VeriSign など、証明書を発行している企業です。 RSA 秘密鍵生成 まずはじめに、OpenSSL で RSA 秘密鍵を作成します。 root 権限は

  • TCP/IP エラー処理 connect 編

    connect(2) のエラー TCP において connect(2) 呼出し時に発生する可能性のあるエラーは以下の通りです。 タイムアウト RST 受信 EHOSTUNREACH また ENETUNREACH シグナル受信 その他 まず、connect(2) 時の正常な流れをしっかり覚えておいてください。 (connect(2) を呼んで) SYN を送る SYN+ACK が返ってくる (ここで connect(2) から戻る) ACK を送る タイムアウト もし仮に、SYN を送ったものの、相手側から SYN+ACK が返ってこない場合は、 (ローカルの TCP スタックが) しつこく SYN を再送します。何度 SYN を送っても SYN+ACK が返ってこない場合はあきらめてタイムアウトします。 「SYN+ACK が返ってこない」というのは、例えば以下のようなケースが考えられます。

  • *BSD で kqueue・kevent を使ってみよう

    *BSD で kqueue・kevent を使ってみよう select() の欠点 select() は複数のディスクリプタをポーリングできる便利なシステムコールです。 しかしパフォーマンスはよくありません。理由は以下の通りです。 ユーザプロセスは、監視対象のディスクリプタ一覧をユーザ領域からカーネル領域にコピーする必要がある。 カーネルがポーリング結果をユーザ領域に返す際もコピーしなければならない。 カーネルは、ポーリング対象のディスクリプタを知るために、配列の全要素を調べなければならない。 ユーザプロセスも、入出力可能なディスクリプタを知るために、配列の全要素を調べなければならない。 上記の作業は、select() を発行するたびに毎回行わなければならない。 select() のパフォーマンスが悪いことは広く知られていたので、 各 OS でいろいろな取り組みが行われてきました。 Sol

  • C 言語で echo サーバを作ってみよう (2)

    select によるマルチスレッドサーバ C 言語において select の使い方を説明します。 echo-server-select.c 117: int 118: main(){ 119: fd_set target_fds; 120: fd_set org_target_fds; 121: int sock_optval = 1; 122: int port = 5000; 123: /* リスニングソケットを作成 */ 124: listening_socket = socket(AF_INET, SOCK_STREAM, 0); 125: 126: /* ソケットオプション設定 */ 127: if ( setsockopt(listening_socket, SOL_SOCKET, SO_REUSEADDR, 128: &sock_optval, sizeof(sock_opt

  • C 言語で HTTP クライアントを作ってみよう (2)

    C 言語で HTTP クライアントを作ってみよう (2) 入出力ライブラリ 前ページ のサンプルでは、ソケットに対する入力・出力に、 それぞれ read・write を使っていました。 しかし、できれば便利な標準入出力ライブラリ、つまり printf や fgets などを使いたいものです。 read/write で入出力を行うときには、socket で得られたソケットディスクリプタという 整数値をそのまま利用しました。一方、printf や fgets の入出力の際は、 FILE 構造体が必要になります。そこで fdopen という、 ディスクリプタから FILE 構造体を生成する ライブラリ関数を使います。使い方は FILE *fp; fp = fdopen(fd, "r"); です。fd は open や socket で得られたディスクリプタ (int 型) です。 fopen の

  • C 言語で HTTP クライアントを作ってみよう (1)

    C 言語で HTTP クライアントを作ってみよう (1) HTTPクライアント C言語版 HTTP プロトコルについては既に解説しましたので、 いきなりソースの解説に入ります。 その前に一応コンパイル方法を説明しておきましょう。 % cc -o http-client http-client.c とすることで、http-client というバイナリが作成されます。 SunOS ではネットワーク関係のライブラリが libc に含まれていないので、 % cc -o http-client http-client.c -lresolv -lsocket -lnsl とライブラリを指定しなければならないでしょう。プログラムの実行は % ./http-client とすることで、http://localhost/ の内容をヘッダも含めて標準出力に出力します。 % ./http-client http

  • 低水準ファイル入出力関数を使おう - 68user's page

    低水準ファイル入出力関数 perl でプログラミングするにしても、 基礎知識としてC言語のファイルディスクリプタの概念を知っておくにこしたことはありません。 特に 4引数 select を使うときには、 ファイルディスクリプタの知識があると理解が早いでしょう。 C言語でファイルを扱うときは、一般的に fopen・fread・fwrite・fclose などの ライブラリ関数を使います。これらは stdio.h で宣言されており、 標準入出力ライブラリ (標準入出力関数) と呼ばれます。 ファイルをオープンするときは FILE *fp; fp = fopen("file.dat", "r"); として FILE 構造体を得ます。それに対して fread・fwrite を実行します。 しかし、これら fopen・fread などのライブラリ関数も、 内部では open・read・write・c

  • DNS クライアントを作ってみよう (2)

    RFC を読んでみよう さて DNS クライアントを作る前に、RFC を読んでみましょう。しかし、 RFC を「DNS」で検索 すると、77個もあります (2005/08/15 時点)。 また、「domain name」で検索 すると 43個です。重複分を除いても 90〜100 個はありそうな雰囲気です。 そこから Obsolete になっているものや、現在ではほとんど考慮しなくてもよくなったものを除いて 読むべきなのでしょうが、あいにくまともなリゾルバを作るつもりはありませんので、 当ページ管理者は RFC 1034、RFC 1035、RFC 1886 だけ読みました。 RFC を読むと照会と応答、いずれも以下のような構成になっているようです (「詳解 TCP/IP Vol.1 プロトコル」にならって、 ここでは「Query」を「照会」、「Response」を「応答」と表記することにしま