Home > Mobile
Mobile Archive
Debian/GNU Linux etch に mod_chxj をインストールしたよ
携帯電話向けにコンテンツを変換する Apache モジュールの mod_chxj が約1年半ぶりにバージョンアップしていたのでインストールしてみました。
deb パッケージだと Apache2.2 に対応していないのでソースからビルドします。
mod_chxjをインストールする前に、下記のものを用意する必要があります。
- Apache2.0のヘッダーファイル群
- Apache2.0用のapxs
- apr(Apache Portable Runtime)ライブラリとそのヘッダファイル郡(apu含む)
- automake、autoconf、libtool1.3.X
- ImageMagick(MagickWand)
- libiconvまたはlibiconv_hook
- Linux
と、ありますので、libapr や libmagick を aptitude でインストールしておきます。
libconv は http://ftp.gnu.org/pub/gnu/libiconv/ に
libconv の日本語パッチは http://www2d.biglobe.ne.jp/~msyk/software/libiconv-patch.html にありますので、それぞれ wget して gzip -dc libiconv-1.12-ja-1.patch.gz | patch -p1 とパッチをあててからインストールします。
$ wget http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.12.tar.gz $ tar xvzf libiconv-1.10.tar.gz $ cd libiconv-1.10 $ wget http://www2d.biglobe.ne.jp/~msyk/software/libiconv/libiconv-1.12-ja-1.patch.gz $ gzip -dc libiconv-1.10-ja-1.patch.gz | patch -p1 $ ./configure $ make $ sudo make install
という感じ。
次に mod_chxj のダウンロードとインストール。
$ wget http://osdn.dl.sourceforge.jp/modchxj/28979/mod-chxj_0.8.1p1.src.tar.gz $ tar vxzf mod-chxj_0.8.1p1.src.tar.gz $ cd mod-chxj_0.8.1p1
こんな感じで解凍したら、エディタで ./src/chxj_cookie.c を開きます。
120行辺りに下記のコードがありますので、ap_run_http_method(r), をコメントアウトして下さい。
if (! has_refer) {
apr_uri_parse(r->pool,r->uri, &parsed_uri);
refer_string = apr_psprintf(r->pool,
"%s://%s%s",
#if AP_SERVER_MAJORVERSION_NUMBER == 2 && AP_SERVER_MINORVERSION_NUMBER == 2
ap_run_http_scheme(r),
#else
ap_run_http_method(r),
#endif
r->hostname,
apr_uri_unparse(r->pool,
&parsed_uri,
APR_URI_UNP_OMITSITEPART));
if (r->args && strlen(r->args)) {
refer_string = apr_pstrcat(r->pool, refer_string, "?", r->args, NULL);
}
apr_table_setn(new_cookie_table, REFERER_COOKIE_KEY, refer_string);
DBG1(r, "ADD REFER[%s]", refer_string);
has_cookie++;
}次にコンパイル&インストール。
$ ./buildconf.sh $ ./configure --prefix=/usr --with-apache-header=/usr/include/apache2 --with-apxs=/usr/bin/apxs2 --with-iconv=/usr/bin/iconv --with-apr-config=/usr/bin/apr-config --with-apu-config=/usr/bin/apu-config $ make $ sudo make install
こんな感じです。
インストールできたらソースパッケージの中にある etc ディレクトリの xml ファイルを /etc/apache2/chxj などという名前のディレクトリを作成してコピーします。
インストール時にモジュールをロードする設定ファイルが Apache のモジュール設定ファイルのディレクトリにコピーされているはずですが、されていなかった場合にはソースパッケージの debian ディレクトリにある chxj.load を適時コピーして下さい。
設定は http://cvs.sourceforge.jp/cgi-bin/viewcvs.cgi/modchxj/mod_chxj/doc/modchxj.html?rev=1.20#doc1_102 を参考にして下さい。
僕は試しに mb サブドメインでバーチャルホストを立てて
<virtualHost *>
ServerName mb.example.com
DocumentRoot /var/www/mb/httpdocs
<directory /var/www/mb/httpdocs>
Options FollowSymLinks MultiViews ExecCGI
AllowOverride All
</directory>
ChxjLoadDeviceData /etc/apache2/chxj/device_data.xml
ChxjLoadEmojiData /etc/apache2/chxj/emoji.xml
ChxjConvertRule "^/chxj.+$" "EngineOn" "UTF-8" "PC"
<location /images>
ChxjImageEngine On
ChxjImageCacheDir /tmp
</location>
</virtualHost>という風にしました。
絵文字や画像のキャリアごとの差異を web プログラム側で気にしなくても良いのはとても素晴らしいことですね。
- Comments: 2
- Trackbacks: 0
mobircをDebian Etchにインストール
keitairc をベースに作られたという mobirc を Debian Etch にインストールしたので、そのときのメモ。
ソースのチェックアウト
svn checkout http://svn.coderepos.org/share/lang/perl/mobirc/trunk/mobirc/
モジュール
perl つかってないのでガツガツモジュール入れました。
sudo cpan -i Module::Install からはじまって
Module::Install Kwalify Plagger POE List::MoreUtils HTTP::MobileAgent POE::Component::IRC POE::Component::Server::TCP POE::Component::Client::Twitter POE::Filter::HTTPD POE::Sugar::Args Proc::Daemon Template Template::Provider::Encoding Template::Plugin::JavaScript UNIVERSAL::require URI::Find strict CSS::Tiny XML::LibXML HTML::Selector::XPath Mobirc::Util Test::Base
と
sudo apt-get install libxml-libxml-perl
という感じ。よくわかりません。
perl Makefile.PL make test
して、モジュールたりないよ><と言われたらモジュール追加。の繰り返し。
設定
cp config.yaml.sample config.yaml
してから config.yaml を編集。
plugin:
Mobirc::Plugin::Authorizer::BasicAuth
アクセスした際の Basic 認証
Mobirc::Plugin::Component::IRCClient
接続する IRC サーバとその設定
(接続するサーバの文字コードは incode で指定)
http:
ページの設定
という感じ。 http: で指定した port: がサーバのポート番号。
./mobirc でサーバ起動。なにもメッセージがでてこなければ大丈夫っぽい。
サーバに http でアクセスするとページが表示されます。
あとは server で /join #team-one とか打てばチャンネルに join
./mobirc --daemonize
でデーモン化
まとめ
Dan the 404 not found
- Comments: 0
- Trackbacks: 0
携帯電話のIPアドレス範囲テーブル
このエントリは[http://spais.jp/output/mobileip]に移動しました。
携帯電話各キャリア(au, DoCoMo, SoftBank WILLCOM)で利用している携帯電話用のIPアドレス範囲を DB 化しました。
MySQL でテーブルをダンプしたやつですが、よろしければお使い下さい。
zip 圧縮したクエリ
up したクエリは MySQL 用ですがクエリを生成したスクリプトは下記のものですので、他のデータベースで利用される方は下記のスクリプトをちょちょっと書き換えてお使いいただいても結構です。
※データベースの接続には PEAR::MDB2 を利用してますので、そこらへんも普段ご利用のアレに置き換えていただければと思います。
$ip = array( 'au' => array( '210.169.40.0/24', '210.196.3.192/26', '210.196.5.192/26', '210.230.128.0/24', '210.230.141.192/26', '210.234.105.32/29', '210.234.108.64/26', '210.251.1.192/26', '210.251.2.0/27', '211.5.1.0/24', '211.5.2.128/25', '211.5.7.0/24', '218.222.1.0/24', '61.117.0.0/24', '61.117.1.0/24', '61.117.2.0/26', '61.202.3.0/24', '219.108.158.0/26', '219.125.148.0/24', '222.5.63.0/24', '222.7.56.0/24', '222.5.62.128/25', '222.7.57.0/24', '59.135.38.128/25', '219.108.157.0/25', '219.125.151.128/25', '219.125.145.0/25', '121.111.231.0/25' ), 'docomo' => array( '210.153.84.0/24', '210.136.161.0/24', '210.153.86.0/24' ), 'softbank' => array( '202.179.204.0/24', '202.253.96.248/29', '210.146.7.192/26', '210.146.60.192/26', '210.151.9.128/26', '210.169.130.112/29', '210.169.130.120/29', '210.169.176.0/24', '210.175.1.128/25', '210.228.189.0/24', '211.8.159.128/25' ), 'willcom' => array( '61.198.142.0/24', '219.108.14.0/24', '61.198.161.0/24', '219.108.0.0/24', '61.198.249.0/24', '219.108.1.0/24', '61.198.250.0/24', '219.108.2.0/24', '61.198.253.0/24', '219.108.3.0/24', '61.198.254.0/24', '219.108.4.0/24', '61.198.255.0/24', '219.108.5.0/24', '61.204.3.0/25', '219.108.6.0/24', '61.204.4.0/24', '221.119.0.0/24', '61.204.6.0/25', '221.119.1.0/24', '125.28.4.0/24', '221.119.2.0/24', '125.28.5.0/24', '221.119.3.0/24', '125.28.6.0/24', '221.119.4.0/24', '125.28.7.0/24', '221.119.5.0/24', '125.28.8.0/24', '221.119.6.0/24', '211.18.235.0/24', '221.119.7.0/24', '211.18.238.0/24', '221.119.8.0/24', '211.18.239.0/24', '221.119.9.0/24', '125.28.11.0/24', '125.28.13.0/24', '125.28.12.0/24', '125.28.14.0/24', '125.28.2.0/24', '125.28.3.0/24', '211.18.232.0/24', '211.18.233.0/24', '211.18.236.0/24', '211.18.237.0/24', '125.28.0.0/24', '125.28.1.0/24', '61.204.0.0/24', '210.168.246.0/24', '210.168.247.0/24', '219.108.7.0/24', '61.204.2.0/24', '61.204.5.0/24', '61.198.129.0/24', '61.198.140.0/24', '61.198.141.0/24', '125.28.15.0/24', '61.198.165.0/24', '61.198.166.0/24', '61.198.168.0/24', '61.198.169.0/24', '61.198.170.0/24', '61.198.248.0/24', '125.28.16.0/24', '125.28.17.0/24', '211.18.234.0/24', '219.108.8.0/24', '219.108.9.0/24', '219.108.10.0/24', '61.198.138.100/32', '61.198.138.101/32', '61.198.138.102/32', '61.198.139.160/28', '61.198.139.128/27', '61.198.138.103/32', '61.198.139.0/29', '219.108.15.0/24' ) ); //$DB = PEAR::MDB2 $pattern = '/^([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\/([0-9]{1,2})$/'; foreach($ip as $career => $hosts){ foreach($hosts as $iprange){ if(preg_match($pattern, $iprange, $matchs)){ $range = pow(2, (32 - $matchs[5])); for($i = 0; $i <$range; $i++){ $decIP = ((($matchs[1] * 256 + $matchs[2]) * 256 + $matchs[3]) * 256 + $matchs[4]) + $i; $ipaddress = str_pad(decbin($decIP), 32, 0, STR_PAD_LEFT); $ipaddress = bindec(substr($ipaddress, 0, 8)).'.'. bindec(substr($ipaddress, 8, 8)).'.'. bindec(substr($ipaddress, 16, 8)).'.'. bindec(substr($ipaddress, 24, 8)); $values[] = "('$decIP', '$career', '$ipaddress')"; } } if(isset($values)){ $r = $DB->exec("INSERT `mobileip` (`decip`, `career`, `ipaddress`) VALUES ".implode(', ',$values)); if(PEAR::isError($r)) die($r->getMessage()); unset($values); } } }
各キャリアのIPアドレス範囲について
各キャリアのIPアドレス範囲のデータソースは以下のとおりです。
使い方
使い方なんてのはそりゃあもう人それぞれかと思いますが、僕は認証システムに組み込んでおります。
が、これだけで決定するわけではなく、もちろん環境変数との整合性を以って確認をするようにしております。
認証システムに組み込むことによってPCでの認証と同じレイヤーで携帯電話の固体識別番号での認証が行えたりします。
そのほか
decip カラムは IP アドレスを10進数に変換した数値です。
MySQL であれば
SELECT `career` FROM `mobileip` WHERE `ipaddress` = '$ipaddress'
とかでキャリアが返ってきますので、環境変数との整合性を確認するキーとでもして下さい。
各キャリアの IP アドレス範囲は2007年9月25日現在のデータです。
もちろん各キャリアごと予告なくいきなり IP アドレス範囲が変わります。
各キャリアとも一般公開向けに IP アドレス範囲をデータ配信などというフレンドリーな窓口はございませんので、常に気を配って下さい。
また、up したクエリやスクリプトを使用して発生した障害や損害などいかなる問題についても僕は責任を取れませんので、ご利用の際は自己責任でお使い下さい。
2007/10/26追記
コメントでご指摘いただき、下記のようにスクリプトを修正いたしました。
Gyokimae さんありがとうございます!
無駄に処理を増やさない!PHP のお兄さんとのお約束を忘れていました!
$ip = array( 'au' => array( '210.169.40.0/24', '210.196.3.192/26', '210.196.5.192/26', '210.230.128.0/24', '210.230.141.192/26', '210.234.105.32/29', '210.234.108.64/26', '210.251.1.192/26', '210.251.2.0/27', '211.5.1.0/24', '211.5.2.128/25', '211.5.7.0/24', '218.222.1.0/24', '61.117.0.0/24', '61.117.1.0/24', '61.117.2.0/26', '61.202.3.0/24', '219.108.158.0/26', '219.125.148.0/24', '222.5.63.0/24', '222.7.56.0/24', '222.5.62.128/25', '222.7.57.0/24', '59.135.38.128/25', '219.108.157.0/25', '219.125.151.128/25', '219.125.145.0/25', '121.111.231.0/25' ), 'docomo' => array( '210.153.84.0/24', '210.136.161.0/24', '210.153.86.0/24' ), 'softbank' => array( '202.179.204.0/24', '202.253.96.248/29', '210.146.7.192/26', '210.146.60.192/26', '210.151.9.128/26', '210.169.130.112/29', '210.169.130.120/29', '210.169.176.0/24', '210.175.1.128/25', '210.228.189.0/24', '211.8.159.128/25' ), 'willcom' => array( '61.198.142.0/24', '219.108.14.0/24', '61.198.161.0/24', '219.108.0.0/24', '61.198.249.0/24', '219.108.1.0/24', '61.198.250.0/24', '219.108.2.0/24', '61.198.253.0/24', '219.108.3.0/24', '61.198.254.0/24', '219.108.4.0/24', '61.198.255.0/24', '219.108.5.0/24', '61.204.3.0/25', '219.108.6.0/24', '61.204.4.0/24', '221.119.0.0/24', '61.204.6.0/25', '221.119.1.0/24', '125.28.4.0/24', '221.119.2.0/24', '125.28.5.0/24', '221.119.3.0/24', '125.28.6.0/24', '221.119.4.0/24', '125.28.7.0/24', '221.119.5.0/24', '125.28.8.0/24', '221.119.6.0/24', '211.18.235.0/24', '221.119.7.0/24', '211.18.238.0/24', '221.119.8.0/24', '211.18.239.0/24', '221.119.9.0/24', '125.28.11.0/24', '125.28.13.0/24', '125.28.12.0/24', '125.28.14.0/24', '125.28.2.0/24', '125.28.3.0/24', '211.18.232.0/24', '211.18.233.0/24', '211.18.236.0/24', '211.18.237.0/24', '125.28.0.0/24', '125.28.1.0/24', '61.204.0.0/24', '210.168.246.0/24', '210.168.247.0/24', '219.108.7.0/24', '61.204.2.0/24', '61.204.5.0/24', '61.198.129.0/24', '61.198.140.0/24', '61.198.141.0/24', '125.28.15.0/24', '61.198.165.0/24', '61.198.166.0/24', '61.198.168.0/24', '61.198.169.0/24', '61.198.170.0/24', '61.198.248.0/24', '125.28.16.0/24', '125.28.17.0/24', '211.18.234.0/24', '219.108.8.0/24', '219.108.9.0/24', '219.108.10.0/24', '61.198.138.100/32', '61.198.138.101/32', '61.198.138.102/32', '61.198.139.160/28', '61.198.139.128/27', '61.198.138.103/32', '61.198.139.0/29', '219.108.15.0/24' ) ); //$DB = PEAR::MDB2 $pattern = '/^([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\/([0-9]{1,2})$/'; foreach($ip as $career => $hosts){ foreach($hosts as $iprange){ if(preg_match($pattern, $iprange, $matchs)){ $range = pow(2, (32 - $matchs[5])); for($decIP = ((($matchs[1] * 256 + $matchs[2]) * 256 + $matchs[3]) * 256 + $matchs[4]), $decMaxIP = $decIP + $range ; $decIP <$decMaxIP; $decIP++){ $ipaddress = str_pad(decbin($decIP), 32, 0, STR_PAD_LEFT); $ipaddress = bindec(substr($ipaddress, 0, 8)).'.'. bindec(substr($ipaddress, 8, 8)).'.'. bindec(substr($ipaddress, 16, 8)).'.'. bindec(substr($ipaddress, 24, 8)); $values[] = "('$decIP', '$career', '$ipaddress')"; } } if(isset($values)){ $r = $DB->exec("INSERT `mobileip` (`decip`, `career`, `ipaddress`) VALUES ".implode(', ',$values)); if(PEAR::isError($r)) die($r->getMessage()); unset($values); } } }
- Comments: 5
- Trackbacks: 0
ホーム > Mobile
- Search
- Feeds
- Meta