dig の出力に色をつける dig-color

  dig の出力に色をつける dig-color というのを作ってみました.
  リソースレコードタイプは A/NS/CNAME/SOA/MX のみにしか対応していませんので,そのほかのタイプが必要であれば追加してください.

#!/usr/bin/env ruby

colors = {
    "section" => "02;01",
    "comment" => "37",
    "normal"  => "00",
    "A"       => "32",
    "NS"      => "34",
    "CNAME"   => "36",
    "SOA"     => "33",
    "MX"      => "31",
}

IO.popen("dig " + ARGV.join(" ")) { |io|
    io.each_line { |line|
        color = colors["normal"]
        if line =~ /^;;.+SECTION:$/
            color = colors["section"]
        elsif line =~ /^;/
            color = colors["comment"]
        elsif line =~ /^(.+\s)(SOA|NS|A|MX|CNAME)(\s.+)$/
            color = colors[$2]
            # レコードタイプのみに色を付ける場合
            #line = sprintf "%s\e[%sm%s\e[00m%s\n", $1, colors[$2] ,$2, $3
        end
        printf "\e[%sm%s\e[00m", color, line
    }
}


- 出力例 (この色が見やすいかどうかは……)
  


- 追記
  Perl で書き換えてくれた方がいました.

- dig の出力に色をつける dig-color(perl版) | cafe chantant blog
  http://www.cafechantant.com/blog/2007/07/04/dig-%e3%81%ae%e5%87%ba%e5%8a%9 ...

リバースプロキシを使って複数のバージョンの PHP,MySQL,Apache を共存させる方法

  PHP 3.x と PHP 4.x は --enable-versioning を configure オプションに加えるだけで,何も考えずに共存できました.
  ただ,PHP 5.x になってから PHP 4.x と共存するのは難しくなっています.

  サーバが一台しかないテスト環境などでは,これでは困る場合もあるわけです.

  そこで,Apache のリバースプロキシを使って複数のバージョンの PHP を共存させます.
  ついでに,複数の MySQL も共存させることにします.

  検証環境は Solaris 10 です.

  今回は php5.example.com にクライアントからアクセスがあったら

- Apache 2.2.2
- PHP 5.1.4
- MySQL 4.1.19

  の環境で動かすとこと,また,php4.example.com にクライアントからアクセスがあったら

- Apache 1.3.36
- PHP 4.2.2
- MySQL 3.23.58

  で動かすということにします.
  MySQL 3.23.58 という古い環境を使うのは,この環境が必要だからなので,適時違うバージョンに読み替えていただけるといいです.

  図にすると以下のようになります.

  共存

  まず,php4.example.com の環境から作ります.インストールはすべてソースから行っています.
  configure のオプションは最低限しかつけていないので,適時環境に合わせてオプションを設定してください.

- Apache 1.3.36

% ./configure --enable-module=most \
              --enable-shared=max
% make
# make install

  でインストールします.ServerRoot は /usr/local/apache になります.
  主な設定は,以下のようですが,ポイントはこの Apache はポート 81 番で動かすことです.

Listen 81
Port 80
ServerName php4.example.com


  Apache 1.3.x の場合は Listen ディレクティブが指定されている場合は,Port ディレクティブはサーバが listen するポートには影響しません.
  ただし,ここで 80 と指定するのは,サーバが自分自身を参照する URL を生成する時に Port ディレクティブを参照するからです.

  この設定をしないで Port 81 などとしてしまうと,http://php4.example.com/foo のように URL の最後に / を付け忘れた場合,サーバは,

http://php4.example.com:81/foo/

  このようににリダイレクト先を返してくるので,リダイレクトの処理がうまくいかないことになります.

- Listen ディレクティブ
  http://httpd.apache.org/docs/1.3/mod/core.html#listen

- Port ディレクティブ
  http://httpd.apache.org/docs/1.3/mod/core.html#port

  また,Apache 2.x の場合は,Port ディレクディブは ServerName ディレクティブに吸収されたので

Listen 81
ServerName php4.example.com:80


  のように指定してあげればいいと思います.

- MySQL 3.23.58

% ./configure --prefix=/usr/local/mysql/3.23
% make
# make install
# ln -s /usr/local/mysql/3.23/bin/mysql /usr/local/bin/mysql3

  MySQL のインストールのポイントは,prefix を /usr/local/mysql/3.23 のようにバージョンをつけていることです.
  これで,他のバージョンをインストールする場合は,/usr/local/mysql/x.x のように分けることができます.
  設定ファイルは,/usr/local/mysql/3.23/var/my.cnf に置くことができます.

  最後に,シンボリックリンクを張っているのは,mysql3 と楽にコマンドを打てるようにです.

- PHP 4.4.2

% ./configure --prefix=/usr/local/php/4.4 \
              --with-apxs=/usr/local/apache/bin/apxs \
              --with-mysql=/usr/local/mysql/3.23
% make
# make install
# ln -s /usr/local/php/4.4/bin/php /usr/local/bin/php4

  PHP も MySQL と同じように prefix をバージョンごとに指定しています.
  使用する MySQL のパスも忘れずに指定します.
  シンボリックリンクも MySQL と同じ理由で /usr/local/bin に張ることにします.

  この場合,php.ini は /usr/local/php/4.4/lib/php.ini になります.

  これで,まず一つ目の環境が完成です.


  次に二つ目の環境を作ります.

- Apache 2.2.2

% ./configure --enable-mods-shared=all \
              --enable-proxy
% make
# make install

  Apache 2.2.2 はこのようにインストールします.ServerRoot は /usr/local/apache2 になります.
  リバースプロキシを利用するので --enable-proxy が必要になります.
  もし,また違うバージョンの Apache が必要な場合は prefix で適当なパスを指定すればいいです.

  設定のポイントは,まずこの Apache はポート 80 番で動かすことです.

Listen 80
ServerName php5.example.com:80


  そして,重要なのは,名前ベースのバーチャルホストとリバースプロキシの設定をすることです.

NameVirtualHost *

<VirtualHost *>
    ServerName php5.example.com
</VirtualHost>

<VirtualHost *>
    ProxyPreserveHost On
    ProxyPass         / http://localhost:81/
    ProxyPassReverse  / http://localhost:81/
    ServerName        php4.example.com
</VirtualHost>


  これで,php5.example.com でアクセスされた場合は,Apache 2.x が処理をして,
  php4.example.com でアクセスされた場合は 81 番ポートで動いている Apache 1.x にわたして処理をさせることができます.

- MySQL 4.1.19

% ./configure --prefix=/usr/local/mysql/4.1 \
              --with-unix-socket-path=/tmp/mysql-4.1.sock \
              --with-tcp-port=3308
% make
# make install
# ln -s /usr/local/mysql/4.1/bin/mysql /usr/local/bin/mysql4

  MySQL のインストールのポイントは,3.23.58 と同様に prefix にバージョンをつけていることです.
  また,UNIX Socket のファイルも /tmp/mysql-4.1.sock のように変更していて,ポート番号も 3308 に変更しています.
  設定ファイルは /usr/local/mysql/4.1/var/my.cnf になります.
  mysql4 としてシンボリックリンクも張っています.

- PHP 5.1.4

% ./configure --prefix=/usr/local/php/5.1 \
              --with-apxs2=/usr/local/apache2/bin/apxs \
              --with-mysql=/usr/local/mysql/4.1 \
              --with-pdo-mysql=/usr/local/mysql/4.1 \
% make
# make install
# ln -s /usr/local/php/5.1/bin/php /usr/local/bin/php5

  これまでと同様に prefix にバージョンに指定しています.
  使用する MySQL のパスも忘れずに指定します.シンボリックリンクも張っています.
  php.ini は /usr/local/php/5.1/lib/php.ini になります.


  テストするためにわざわざ DNS に登録する必要はなく,hosts ファイルに書いてしまえばいいです.
  例えば,サーバの IP アドレスが 192.168.1.2 ならば,クライアントの hosts ファイルに

192.168.1.2    php4.example.com    php5.example.com

  このように書いてあげればすぐ使えるようになります.


  以上のようにして,PHP,MySQL の複数のバージョンが共存する環境を手に入れることができます.
  ちょっと面倒ですが,ひとつのサーバしかなくて困っている場合は有効な手段だと思います.

- <VirtualHost> ディレクティブ
  http://httpd.apache.org/docs/2.2/ja/mod/core.html#virtualhost

- バーチャルホストの例 - Apache HTTP サーバ
  http://httpd.apache.org/docs/2.2/ja/vhosts/examples.html

自分のペースでゆったり学ぶ TCP/IP

  4774122424
  amazon.co.jp 詳細ページへ
  網野 衛二 (著)
  技術評論社
  ISBN: 4774122424
  2005/01
  1,869 円

Apache のログから帯域幅を算出する PHP スクリプト Calc Bandwidth

  http://www.xpenguin.com/calcbandi.php

  当日のログと前日のログから帯域幅を算出してくれる.
  使うためには,当日のログと前日のログを切り出してこなくてならない.

  スクリプトはえらく簡単なので,他言語でも簡単に実装できそう.

  ちなみに,出力は以下.

Yesterday's bandwidth: 71845.7 KBytes
Today's bandwidth so far: 78117.2 KBytes
Change in bandwidth: +8.7%
Time covered in today's log: 86382 seconds, (100% of day)
Estimated change in bandwidth (by midnight): +8.7%

- via: phpspot 開発日誌
  http://phpspot.org/blog/archives/2006/01/apachecalc_band.html

HTTP の学習に適した Studying HTTP

  http://www.studyinghttp.net/

RFC 2616 等の HTTP に関する文献等を紹介し、HTTP やそれに関連する技術についての知識を深めるためのサイト

  なかなかわかりやすい.

Python で書かれた CISCO IOS シミュレータ pyIOS

  http://sourceforge.net/projects/pyios/

  pyIOS-alpha-0.3.tgz は解凍できないので pyIOS-alpha-0.2.tgz を使うと遊べる.
  まあ,遊んでみたけど,すぐ飽きた.IOS なんてもう 2 年以上触ってなくて,完全に忘れている.

- via: /home/pochi/ChangeLog
  http://www.pochi.cc/~sasaki/chalow/2005-11-15-5.html

今夜わかるメールプロトコル

  479810941X
  amazon.co.jp 詳細ページへ
  上野 宣 (著)
  翔泳社
  ISBN: 479810941X
  2005/06/17
  2,625 円

  typo が多いそうなので,注意.

- 正誤表アップデート「今夜わかるメールプロトコル」
  http://d.hatena.ne.jp/sen-u/20050705/p1

- 正誤表アップデート
  http://d.hatena.ne.jp/sen-u/20050714/p2

  今夜わかる TCP/IP,今夜わかる HTTP と共に,ネットワーク管理者には是非読んでもらいたい.

- 今夜わかる TCP/IP:
  4798108197
  amazon.co.jp 詳細ページへ
  上野 宣 (著)
  翔泳社
  ISBN: 4798108197
  2004/12/09
  2,415 円

- 今夜わかる HTTP
  4798108200
  amazon.co.jp 詳細ページへ
  上野 宣 (著)
  翔泳社
  ISBN: 4798108200
  2004/12/09
  2,520 円

携帯電話から遠隔地のコンピュータを操作するシステム

- Mobile Utility
  http://mutil.jp/top/release.html

韓国 IP アドレスからのパケットを遮断する

  http://www.hakusan.tsg.ne.jp/tjkawa/lib/krfilter/

  韓国(.kr)・中国(.cn)・台湾(.tw)・香港(.hk)・インド(.in)・インドネシア(.id) からのアクセスをフィルタリング
  たしかに,不正アクセスのほとんどが,上記の国からだったり..

プロトコルアナライザ Packetyzer

- Network Chemistry: Packetyzer
  http://www.networkchemistry.com/products/packetyzer/

- via: プロトコルアナライザ「Packetyzer」
  http://www.itbook.info/mt/archives/002137.php