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

こんな感じで受信
[[]]