fc2ブログ
プロフィール

けい

Author:けい
公開したWebサービス・アプリ一覧はこちら

※2014年12月、私が個人で開発したWebサービス・アプリへの
累計アクセス数は8億を超えました。
負荷対策頑張ります。日々精進していきます!!


■■■ 業務経歴 ■■■
社会人1年目:携帯電話開発。画面周りを1年間
2年目 :海外向け携帯電話ミドルウェア開発
     ブラウザとプロトコルスタック周り
2年目後半~:携帯電話の通信専用チップ開発
3年目:カーナビ。画面周りの開発
3年目後半~:BDビデオカメラ
     組み込みLinux カーネルと
     ドライバの開発。
4年目12月:プロジェクト途中で退社
~ここまではC、またはC++で開発~

~ここからJavaがメインの開発~
4年目1月:Web系の会社に転職
       ~4ヶ月間の研修
5年目5月:製造業向け生産管理システム開発
6年目9月:証券会社向けシステム開発
7年目10月~携帯電話向けコミックサイトの運用・開発
8年目12月:プロジェクト途中で退社

~ここからPHPがメインの開発~
8年目1月~仲介手数料が無料の不動産屋の社内SEに転職
交渉しほぼ完全に裁量労働が可能な立場になる。
業務内容はシステム全般ですが、
最近はSEO対策の作業が多いです。
現在14年目 まだ、しばらくはこの会社に居るつもりです。

あと、全ての記事がリンクフリーです。

最近の記事

過去ログ

全ての記事を表示する

全ての記事を表示する

カテゴリー

FC2カウンター

RSSフィード

AtermからAsterisk接続用のパッチ

先日予告したとおり、AtermからAsteriskへの接続用パッチを作成しました。
Aterm WR7610HVを使用している人は必須となりますので
パッチを当ててください。

パッチは最新のAsterisk1.4.13用です。
以下においてあります。

patch.txt

パッチの当て方
?ソースディレクトリに移動する
$ cd asterisk-1.4.13/channels

?パッチを当てる
$ patch < patch.txt
あとはmake,make installなりしてください。

1.4.13以外のバージョンを使用している人は
asterisk/channels/chan_sip.c を直接編集してください。
編集と言ってもやることは簡単です。

?ソースからrecvfromを検索する。(一箇所しかないです)
?recvfromの次の行に以下のソースの内容をコピーする。

copy.c

あとはmake,make installなりしてください。


WR7610以外のAtermを使用している人は
まずパッチを当てる必要があるかどうかを確認します。

?パケットのダンプを取ります。
$ sudo tcpdump -nX -s 1500 port 5060 -w tcpdumpdumpFiles.pcap

?ダンプしたファイルをエディターで開きます。
?「response」で検索してください。

見つかったresponseが以下のように複数行にまたがっていた場合、
パッチを当てる必要があります。
Authorization: Digest username="202",
realm="asterisk",
nonce="3c62a809",
uri="sip:192.168.11.109",
response="3c79a71c3d9db5f3bec0c8e5f8be20f9"

以下のように一行で書かれている場合には
パッチを当てる必要はありません。
Authorization: Digest username="201",realm="asterisk",nonce="48728978",uri="sip:192.168.11.109",response="29043a61b422f2d1b2c642fdd45afd10",algorithm=MD5

RFC的にどうなのかは知りませんが、
これはAsteriskが行単位で構文を解析しているために発生していました。
すなわち、この場合にはrealm、nonce、uri、responseが空白としてAsteriskに認識されています。
これを回避するために提供するパッチでは','に続く改行コードを削除しています。
スポンサーサイト



コメント(0)   2007.10.24    [ Myカテゴリ:試してみた ]

Aterm からAsteriskの接続

Aterm WR7610からAsteriskの接続
(多分WR7610/BR500/WD700/WD600/DR300/DR200
各シリーズでも同じ方法で接続可能。
もしかしたら、ソースをいじらなくても接続できる機種もあるかも)

TEPCOやKDDIが正式採用していることもあって、
家庭用VoIPアダプタ兼ルーターとして、
日本でかなり普及していると思われるAterm。
実は結構な人たちが、SIPを話すことを知らずに使っていたりします。

ただし、最近ではSIPの設定や、PPPoE設定をユーザーにやらせると
サポートの工数がかかることや、
レンタル品をオークションに出品されるなどのトラブルもあり、
AtermBL 170HVなんかは、ユーザーが設定できる項目がほとんど無くなってしまいました。

とはいえ、我が家にはTEPCOに半分騙されて購入してしまったWR7610HVが2台も余っているので、
なんとしてでも使わないといかんと思い、頑張りました。(当初TEPCOはIP電話アダプタを販売していたのだが、規約の変更後、IP電話アダプタをレンタルしないとIP電話の契約が不可能となった)

まずこのルーターのSIPの設定項目です。
qqqqqqqqqwwwwww



見てのとおり、物凄くシンプルですね。
試しにAsteriskに接続して見ると、見事につながりません。

パケットのDumpを取ってみました。
以下がAterm。
REGISTER sip:192.168.11.109 SIP/2.0
Via: SIP/2.0/UDP 192.168.11.13:5060;branch=z9hG4bK181690304
From: ;tag=32736982
To:
Call-ID: 322073727@192.168.11.13
CSeq: 41 REGISTER
Max-Forwards: 70
Contact:
Expires: 3600
Content-Length: 0
Authorization: Digest username="202",
realm="asterisk",
nonce="69641e1a",
uri="sip:192.168.11.109",
response="f50ca4b2be00d00628e5ffe4a5769afa"


こっちはX-liteです。
asssssdff


REGISTER sip:192.168.11.109 SIP/2.0
Via: SIP/2.0/UDP 192.168.11.202:22042;branch=z9hG4bK-d87543-0b27ba6b947c8d5a-1--d87543-;rport
Max-Forwards: 70
Contact:
To: "202"
From: "202";tag=044fb075
Call-ID: NTJlODk1NWQyMWNlNDFiZTI3ODVmNmU1YWJjOGNhYzE.
CSeq: 2 REGISTER
Expires: 3600
Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, NOTIFY, MESSAGE, SUBSCRIBE, INFO
User-Agent: X-Lite release 1011s stamp 41150
Authorization: Digest username="202", realm="asterisk", nonce="7627748c", uri="sip:192.168.11.109", response="ccefaf352975909af5ff80817d25ce41",algorithm=MD5
Content-Length: 0

この後、X-Liteでは正常にログインできるのだが、
Atermではログインできない。
怪しい箇所は見た感じ無いのだが、
エラーメッセージが無いので、
なぜうまくいかないのかはわからない。
vvvをいっぱいつけるとログが詳細に出るようなので、
試してみるがそれらしいログは無い!

$ sudo asterisk -vvvvvvvvvvvvvvvvvvvvvvcr


しゃーない。ソースでも見るか~~。
ということでソースを見てみる。

う~ん、なんかrealm、nonce、uri、responseがきちんと渡されていなさそう。
Authorization: って改行を含んでもいいものなのかしら。
Authorization:の改行が原因らしいので、
削除するようにソースを修正したところ、
見事にログインできました。

内線にかけてみたところ、無事に繋がり
音声も聞こえました。

P.S
パッチ配布の準備はできてますので、
需要がありそうなら配布しますよ。
コメント(12)   2007.10.20    [ Myカテゴリ:技術の話 ]

海外ドラマ 24 -TWENTY FOUR のIT用語が適当すぎて萎えるのですが・・・

どうも。けいです。
最近24というドラマを見ました。とはいってもシーズン1~4までですが。
ストーリーはなかなか面白いのですが、途中途中に入るIT用語なんかが
適当すぎて「なんだよもう~~」という気分にさせられます。

というより時間が余るとITに頼って、時間を稼いでる気がするんですよね。
それにIT要員が多すぎる気も・・・しかもIT要員が順番に私的なトラブル起こすし・・・
トラブルを起こしていないIT要員がいない職場っていうのもすごいですよね。


例えば、
・シーズン3:ニーナがCTUに仕込んだウィルスはCTU全体に感染した。
その後クロエが解除し、一安心でそのまま業務を続ける。
ー>他にもウィルスがあるとは考えないのか?
ー>解除の検証はしなくていいのか?
ー>そもそもウィルスの被害を確認しないで、そのまま業務に戻ることがおかしい

・シーズン4:ルーターのNATテーブルにウィルスが仕込まれていて、
全世界のネットワークが麻痺する。止めなければ!
ー>なんでこんな難しくて自由度が低いところにウィルスを仕込むんだ?
こんな難しいところに仕込むくらいならば、インターネット上でパッチの当たっていない
PCを複数台配下にしたほうがよっぽど簡単であるし、効果もある。

その他にも、電力線通信でCTU内でこっそりデータを送ったり、
ネットワーク管理者はどこに行った~~的な現象があるたびに・・・萎える。
視聴者にも予想がつかないほど管理者がわからない。
みんながネットワーク管理者兼、システム管理者兼、技術者なんですもん。

そういえばハリウッドの映画でも、インディペンデンスディみたいに
最終兵器が人間の作ったウィルスだったりして激しく萎えた記憶があります。
どうやって宇宙人の作ったシステムで実行できるソフトを作ったんだYO!!って



自分の専門分野だからこんなに粗が目立つのかなと思い
他の職業の人はどう思っているのかと思って聞いてみると、
やっぱり自分の専門分野の映画は見れたもんではないそうです。
警察官は警察ドラマを全然楽しめず、弁護士は法廷ドラマを楽しめないと。

・・・私はどうやらITがでてこないドラマを見たほうがよさそうですね。


2007/11/30 追記
プリズンブレイクならば刑務所が舞台だからITが関係ないぞ~と思って見てみたら、
なぜか水没したHDD上の"ファイル"を読み込むのにMBRの修復が必要でした。

なぜMBR!
またITか!

2008/12/28 追記
プリズンブレイクのシーズン4はハッカーが出てくるのですが、
突っ込みどころ万歳過ぎて、私は最後まで見れませんでした。
・携帯電話くらいの機器であらゆるデータを盗む
ー>無線に対応していない機器のデータを盗むのムリ。
ー>チューナーいくつ積んでいるの?あの大きさで全ての無線規格を同時にカバーするのムリ。

ハッキングも現実的じゃない方法で行うので、私にはとてもじゃないけれど見れたもんじゃない。
シーズン4ではスコフィールドが頭のいい人に見えませんでした。

そういえば、途中までしか見ておりませんが、
「ブラッディ・マンデイ」のハッキングは現実的で私は好きです。
あのドラマのハッキングは私が初めてそそられたハッキングの光景ですね。
ドラマの作成スタッフには間違いなく、プロの技術者が絡んでいるのでしょう。

「ブラッディ・マンデイ」のハッキングの光景ではよくコマンドプロンプトの画面が出てきますが、
あそこに出てくる用語が、ああ、今何をやっているんだなぁ~と追えるくらいの
精度を持っていて技術者的に萌え。

まぁそれでもやっぱり、絶対にできないようなハッキングの光景もありました。
それは技術者が悪いと言うより、ハッキングに関しては原作が足を引っ張っている感じですね。
原作よりもドラマのほうが、よりリアルなハッキングなので。


2009/08/29 追記
 もうIT関連で萎えるたびに定期的に更新してやる。
私は貴志祐介さんの本が大好きで、個人的にもっとも外れが少ない著者だと思っているのですが、
「硝子のハンマー」は頂けなかった。
以下、ネタバレ注意。


この本ではルピナスVなる介護ロボットが出てくるのですが、
プロの技術者の目から見るとトリックに使うには無理なんです。
その最大の理由は・・・ログです。

こんなにセキュリティがどうとか言っていて、ましてや人間を扱うロボットが
ログを出さないなんていうことはありえないんです。
もう随分前から安全性、トラブル対応、ユーザーサポートなどの観点から、
ログは必須になりました。

かくいう私も以前ブルーレイ・HDDの録画機なんかを作っていましたが、
お客さんから「録画していたデータが消えた。賠償しろ。補償しろ」的なトラブルを
持ち込まれると、まずログを確認します。
「見てください。2005/10/28 12:22:56 削除しています。ご家族が操作を誤ったのでは?」などと
詳細な操作ログを見せると、相手も納得されます。

つまり、最低でも起動終了、充電開始終了のログが残ってしまうため、
その時間に何か動作をしていたということは、すぐにわかってしまうのです。
そして、その時間に目視しながらリモコンで操作する以上は、犯人は自然とわかります。

また、プログラム書き換え云々の話がありましたが、あの辺もプログラマー全員が犯人ならばともかく

「バグを仕込んで誰にも気づかれないことは可能であっても、
バグを仕込んでおいて、自分の思いどうりの行動をさせるのは無理」

なのですよ。なぜならば、その行動をさせるためのプログラムもまた大量に作成しなければいけないので
そんなセキュリティ云々言っている中で、特権的なプログラムが大量に存在していたら
周りがすぐに気がつきます。

同時にプログラムというのは一発でまともに動かすのは困難なので、
長い間のテストを行わなければなりません。
萎えることに組み込みならば開発期間のほとんどがテストです。
そんな怪しいプログラムの怪しいテストを長期間やることはプログラマー全員が犯人で無ければ無理。

ルピナスVのROMは結果的に書き換えられていなかったので、よかったのですが、
途中途中での認識が怪しくて別の意味でハラハラさせられたのは事実。
コメント(0)   2007.10.14    [ Myカテゴリ:時事・駄文 ]

asterisk 1.4.12への接続設定(1)

次は接続設定などを行う。

?rtpの使用ポート番号の設定
/etc/asterisk/rtp.conf の変更。
使用するポート番号を指定する。

rtpstart=10000
rtpend=20000

?日本語を使用する場合には
/etc/asterisk/zapata.confのlanguageを変更する

[channels]
language=jp

?読み込みモジュールの変更
/etc/asterisk/modules.conf を変更する。

?いよいよ電話機で用いる設定です。
/etc/asterisk/sip.conf を変更します。

最終行に以下を追加する。
[201]
type=friend
username=201
secret=pass
canreinvite=no
host=dynamic
dtmfmode=auto
callgroup=1
pickupgroup=1

[202]
type=friend
username=202
secret=pass
canreinvite=no
host=dynamic
dtmfmode=auto
callgroup=1
pickupgroup=1


?ダイヤルプランの設定
/etc/asterisk/extensions.conf の[default]セクションに以下を追加する。

exten => _20Z,1,Dial(SIP/${EXTEN},60,rT) ; permit transfer
exten => _20Z,n,Congestion

?MP3ファイルをasteriskで使用できるようにする。
/etc/asterisk/musiconhold.conf の
[default]セクションに以下の記載を追加する。
mode=quietmp3
directory=/var/lib/asterisk/mohmp3

以下のディレクトリを作成する。
# mkdir /var/lib/asterisk/mohmp3

所有権をasteriskに変更する
# chown -R asterisk.asterisk /var/lib/asterisk/mohmp3

何らかのmp3ファイルをmohmp3ディレクトリにコピーする
# cp test.mp3 /var/lib/asterisk/mohmp3/

asterisk CLI に接続するには以下のコマンドを実行する。
# asterisk -vvvcr

x-liteを用いて接続する
connectingxlite


OKを押すと接続される
xlite2

コメント(0)   2007.10.08    [ Myカテゴリ:試してみた ]

asterisk 1.4.12のインストール(2)

昨日の続きです。
いよいよasterisk本体ののインストールを行います。
?以下からソースを入手する
http://www.asterisk.org/downloads

?解凍する
?./configure を実行する
?$ make menuconfig を実行して必要なモジュールを選択する。
?$ make を実行する
?$ sudo make install を実行する。
実行するとサウンドファイルなんかをdigium社からダウンロードし始める。
makeでやっちゃう辺りがかっこいいなぁ。
?以下のコマンドを実行し、自動起動ができるように設定する。
$ sudo make samples
$ sudo make config
?実行権限の変更
グループasterisk の作成
# groupadd asterisk

ユーザー asteriskの作成。
-d で設定しているのはログインディレクトリである。
# useradd -d /var/lib/asterisk/ -s /usr/sbin/nologin -g asterisk asterisk

zaptelのデバイスの実行権限をasteriskに変更
# chown -R asterisk:asterisk /dev/zap/
その他、asterisk関連のフォルダ、ファイルの権限全てをユーザーasteriskに変更する

# chown -R asterisk:asterisk /var/lib/asterisk
# chown -R asterisk:asterisk /var/log/asterisk
# chown -R asterisk:asterisk /var/spool/asterisk
# chown -R asterisk:asterisk /usr/lib/asterisk
# chown -R asterisk:asterisk /etc/asterisk
# chown -R asterisk:asterisk /dev/zap
# chmod -R u=rwX,g=rX,o= /var/lib/asterisk
# chmod -R u=rwX,g=rX,o= /var/log/asterisk
# chmod -R u=rwX,g=rX,o= /var/spool/asterisk
# chmod -R u=rwX,g=rX,o= /usr/lib/asterisk
# chmod -R u=rwX,g=rX,o= /etc/asterisk
# chmod -R u=rwX,g=rX,o= /dev/zap

?/etc/init.d/asterisk スクリプトを変更し、ユーザーasteriskが実行したことにする。
以下の行のコメントをはずす。
#AST_USER="asterisk"
#AST_GROUP="asterisk"

?コントロールファイルの配置。
私の場合、コントロールファイルの配置設定を行わなければ、
エラーメッセージ(does /var/run/asterisk.ctl exist?)が消えなかった。
よって以下の作業を行った。
/etc/asterisk/asterisk.conf にある、astrundirを以下のように変更する。

変更前
astrundir => /var/run/
変更後
astrundir => /var/run/asterisk/

コントロールファイル専用のディレクトリの作成
$ sudo mkdir /var/run/asterisk
$ sudo chown -R asterisk:asterisk /var/run/asterisk/
$ sudo chmod -R u=rwX,g=rX,o= /var/run/asterisk/

アスタリスクの開始
$ sudo /etc/init.d/asterisk start

うん。どうやら大丈夫なようだ。
しかし・・・結構予想よりも重い作業ですな。
特にカーネルコンパイルが必要な点や、モジュールの組込なんかで断念する人が続出しそうな・・・
おとなしく、asterisk派生ディストリビューションを使えということなのだろうか。
コメント(0)   2007.10.07    [ Myカテゴリ:試してみた ]

asterisk 1.4.12のインストール(1)

新しいサービスを思いついたのでasterisk 1-4.12をインストールしてみる。
本来ならばaptを使ってサクサクインストールしたいところだが、
いかんせん安定性を重視するdebianではpackageが古い。
(現状stableでは1.2がインストールされる)
asteriskは1.2->1.4で劇的な進化をしているので、どうしても1.4が使いたいのだ。
ということでソースコードからmakeしてみる。
参考にした本はAsterisk徹底活用ガイド。
OSは最新のlinux-2.6.22。
ディストリビューションはdebianである。

asterisk 1-4.12 のインストールの前に
zaptelというパッケージのインストールが必要になる。
ここで注意しなければならないのが、zaptelのバージョンとasteriskのバージョンは
asterisk1.X系 ならばzaptelも1.X系にそろえる必要があると言うことである。
そのため残念ながらzaptelもaptでインストールすることはできない。

zaptelのインストール

?以下からソースを入手する
http://www.asterisk.org/downloads

?解凍する
?./configure を実行する
g++が入っていないと以下のエラーが出る場合がある
(configure: error: C++ preprocessor "/lib/cpp" fails sanity check)
また、menuconfig を動かすためにlibncurses5-dev パッケージも必要である。

?$ make menuconfig を実行し、以下にチェックを入れる
 ・Kernel Modules -> ztdummy
 ・Utility -> ztcfg
?$ make する
?$ sudo make install でインストールする
?$ sudo make config でinitに配置する。
$ sudo /etc/init.d/zaptel start を実行してみる。

・・・起動しない。うんともすんとも言わない。
ふん、伊達にdebianを8年も使っていないですよ私。
とりあえずはREADMEを読んでみる。
するとこんな記載を見つけた。

@@@@@@@@@@@@@@@
Build Requirements
------------------
You will need a matching kernel source tree and a working Linux build
system. Some of the programs require some additional libraries.

The script build_tools/install_prereq should help you install the
required packages. To see what it suggests, run:

build_tools/install_prereq test

You can either copy/paste that code to a terminal to run it, or just
run:

build_tools/install_prereq test

Kernel Configuration
~~~~~~~~~~~~~~~~~~~~
If you build a custom kernel, note the following configuration items:

- CONFIG_CRC_CCITT must be enabled ('y' or 'm'). On 2.6 kernels this can
be selected These can be selected from the "Library Routines" submenu
during kernel configuration via "make menuconfig".
- If you don't have any zaptel hardware, you need ztdummy.
* ztdummy on i386/amd64 and later kernels (>= 2.6.15) can (and should)
use the system's RTC (Real Time Clock).
* Alternatives to that for ztdummy are a UHCI USB controller (USB
controllers made by Intel or VIA) or a kernel that has HZ=1000
(default on kernels 2.6.0-2.6.12, optional on newer kernels. Not
possible on 2.4).
@@@@@@@@@@@@@@@

ええええ、意外とめんどくさいなこれ。
なるほど・・・
「Asterisk派生ディストリビューション」という摩訶不思議な造語が生まれた理由がわかる気がする。
つまりasterisk用に必要なモジュールを組み込んだカーネル + zaptel + asteriskが
ディストリビューションと呼ばれるほど需要があると言うか、
それほどまでに使いづらく、作りづらいわけですな。

愚痴っていても仕方がないのでとりあえずやるか。

?以下のコマンドを実行する。
$ ./build_tools/install_prereq test
#############################################
## test: test mode.
## Use the commands here to install your system.
#############################################
apt-get install -y    @@@この行に何のパッケージが抜けているかが表示される
#############################################
## test completed successfully
## (in test mode)
#############################################

色々、入っていないパッケージがある場合はここで指摘される。

?カーネルのリコンパイル。以下のモジュールをビルド対象とする。
・Library routing -> CRC-CCITT functions を組み込む
・Device Drivers -> Real Time Clock を組み込む
・Device Drivers -> USB support -> UHCI HCD(most Intel and VIA)
・Processor type and features -> TimerFrequency の周波数を1000に変更する。

?zaptel, ztdummyモジュールをインストールする。
※ここは数時間はまったところです。
結論から言うと、$ make install 時に作成される
/etc/init.d/zaptel は使ってはいけなかった。

なぜならばztdummyを有効にすればいいだけなのに、
「/etc/init.d/zaptel では/etc/zaptel.conf が存在するか?」などの処理が実行されており、
いつものように/etc/init.d/zaptel start | stop なんかを実行してもエラーが起きてしまうのだ。(しかもエラーメッセージは無い。)

手動でカーネルモジュールを有効にするには以下のコマンドを実行するだけでよい。
$ sudo insmod zaptel
$ sudo insmod ztdummy

モジュールがインストールされているかを確認する。
$ lsmod
Module Size Used by
ztdummy 5480 0
zaptel 180068 1 ztdummy

これでようやくzaptelのインストールは終了である。
(2)に続く
コメント(0)   2007.10.05    [ Myカテゴリ:試してみた ]
Template Designed By
ぐらいんだぁ