Ubuntu入れて大学のWiFi内で動かしているノートPCを主にUstream用途に使っているんだけど
DHCPで自動割り当てされるIPアドレスをsshやVNCでリモートログインしたい時にいちいち調べるのもめんどうなので作った。

前にgtalk-sendコマンドで使ったXMPP4RというRubyのXMPPライブラリを使って、google talkにIPアドレスを投げるようにしてみた。

gtalk-send-ip.rb

#!/usr/bin/env ruby
require ‘rubygems’
require ‘xmpp4r’
require ‘kconv’

ifc = `/sbin/ifconfig` # OS毎にパスが違うかも
inets = ifc.scan(/.*(inet.*) .*/i)
puts ‘–your IP info–‘
puts inets

user = ‘your-google-account’
pass = ‘your-google-password’

client = Jabber::Client.new(Jabber::JID.new(user))
client.connect(‘talk.google.com’, 5222)
client.auth(pass)

puts ‘sending to: ‘ + user
msg = Jabber::Message.new(user, ‘(sho-x32) ‘+inets.to_s) # 自分に送る
client.send(msg)

puts ‘–finished–‘

ホスト名を割り当ててないマシンのIPアドレスをRubyで調べる方法がわからなかったので、ifconfigコマンドの返り値を正規表現で抜き出して送るようにした。

実行すると別マシンでログインしているGoogle Talkで受信できる
(XMPPなのでGoogle Talk以外のJabberクライアントでも使える。下ではPidginを使っている)
gtalk-send-ip.rb


cronに

0 * * * * /usr/bin/ruby /home/sho/src/ruby/gtalk-send-ip.rb

という具合に登録して1時間ごとに送信させるようにした。
gtalk-send-ip.rb
パソコン使ってるとつい時間が経ってしまうので時計代わりにもなる


ちなみにこのコード、ログインしたアカウント(自分自身)に送ってすぐログアウトしているので、メッセージは先にログインしている別のマシンに送られる。
gtalk-sendコマンドの時は「2つgoogleアカウントが必要」と書いたけど1つで大丈夫だった。