パスワードを忘れた? アカウント作成
449213 journal

enhydraの日記: Yahoo!メッセンジャープロトコル

日記 by enhydra

何故かYahoo!メッセンジャーのプロトコル解析とPerlのクライアントライブラリを書きたくなって徹夜。参考になるサイトが幾つか有ったので比較的情報に恵まれた状態で作業が進んだ。現在のところログインとメッセージ送信までは完成し、Perlのモジュール化も済んでいる。

#!perl
use Net::YahooMessenger;
use strict;

my $yahoo = Net::YahooMessenger->new;
$yahoo->id($Yahoo_id);
$yahoo->password($Password);
$yahoo->login;
$yahoo->send($recipient, $message);
__END__

とこんな感じで送信可能。これでWebと連携させたりPerl/Tk版クライアントを作ったり変なGateway作ったりと楽しめそうだ。

作成中に幾つか驚いた点がある。Yahoo!メッセンジャーはサーバとの通信を始めるために認証を済ませた後に4byteのセッションIDを付与される。以降の通信はこのセッションIDを付加してやりとりする。まぁ普通の実装だなー、と思っていたのだが、最初間違って不正なセッションIDを付加して通信をしてしまったところ、全く関係ない別のセッションと思われるメッセージの一部が端末に表示されている!
iChatがベース(今もそうなのかなぁ)であるYahoo!メッセンジャーのシステムはメッセージのルーティングを行うための共通バスをもっているのだが、おそらくこのセッションIDでルーティング先などを決定するのではないかと邪推できる。まぁ、このセッションIDを推測する方法と確実にメッセージを取得する方法はサッパリ解らないので大丈夫だろうけど。

あ、ライブラリとドキュメントは近日公開予定。っちゅーかその前に需要あるのか?

この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
typodupeerror

目玉の数さえ十分あれば、どんなバグも深刻ではない -- Eric Raymond

読み込み中...