WARPSTARのGlobal IPアドレスを取得するプログラム

NEC製のCATV/ADSLルータのWARPSTARのWAN側のIPアドレスを取得するプログラムを書きました。
どの機種にも使えるかどうかはわかりませんが、telnetのインタフェースを持っているものなら少し改造すれば使えると思います。

HOSTとUSER_NAMEとPASSWORDをご自分の環境に合わせて修正してくださいね。

#!/usr/bin/ruby
# WARPSTER用のIPアドレス取得プログラム

# HOST, USER_NAME, PASSWORDを設定してください。
HOST="192.168.0.1"
USER_NAME="your_id"
PASSWORD="your_password"

def get_ip host, user, password
  telnet = nil

  begin
    require 'net/telnet'
    telnet = Net::Telnet.new("Host"=>host, "Prompt"=>/^>/)

    telnet.waitfor(/[lL]ogin/)
    telnet.cmd("String"=>user, "Match"=>/^Password: /)
    telnet.cmd("String"=>password)

    ip = nil
    telnet.cmd("String"=>"show info wan 22") do |c|
      c.split(/\n/).each do |line|
        if line =~
          /^ IP ADDRESS(?:[\s.]+)(\d+)(?:[\s.]*)(\d+)(?:[\s.]*)(\d+)(?:[\s.]*)(\d+)/
          ip = "#{$1}.#{$2}.#{$3}.#{$4}"
          break
        end
      end
    end
    telnet.cmd("exit")
  rescue
    if telnet
      telnet.close
    end
  end
  ip
end


ip = get_ip HOST, USER_NAME, PASSWORD
print "ip:#{ip}\n"