Rubyを使ってIP Messengerへメッセージ送信
今の職場でIP Messengerを使用していますが、職場の人がスケジュールされた時刻になったらLinux上のatを使用してメッセージ通知するシステムを作ってた。なんとなく面白そうだったので便乗して遊んでみた。
とりあえずロジックとしては簡単で、UDPの2425(デフォルト)番ポートで待ち受けしているクライアントに対して、特定のフォーマットで送信すれば受け取ってくれる事がわかった。
【IP Messenger 通信プロトコル仕様】に記載されているフォーマットは下記のとおり
1) コマンド(フォーマットバージョン1)
Ver(1) : Packet番号 : 自User名 : 自Host名 : Command番号 : 追加部
2) 現在のコマンドフォーマットによるメッセージの送信文字列例
"1:100:shirouzu:jupiter:32:Hello"
送信テストの内容
- 送信先IP / 192.168.1.1
- 送信先ポート / 2425
- フォーマットバージョン / 1
- パケット番号 / 10
- 自ユーザ名 / USER
- 自ホスト名 / HOST
- コマンド番号 / 32
- 追加部(送信文字列) / Hello World
上記の内容で送信するために最近勉強し始めたRubyで送信してみる。
$ irb irb(main):001:0> require "socket" => true irb(main):002:0> u = UDPSocket.open() => #<UDPSocket:0xb7f51a38> irb(main):003:0> s = Socket.pack_sockaddr_in("2425", "192.168.1.1") => "\002\000\ty\300\250\001\001\000\000\000\000\000\000\000\000" irb(main):004:0> u.send("1:10:USER:HOST:32:Hello World", 0, s) => 29 irb(main):005:0> u.close => nil