class TPLinkCommander

Public Class Methods

new(local_ip,login,pass) click to toggle source
# File lib/tp_link_commander.rb, line 6
def initialize(local_ip,login,pass)
  @local_ip=local_ip
  @login=login
  @pass=pass
end

Public Instance Methods

change_ip() click to toggle source
# File lib/tp_link_commander.rb, line 41
def change_ip
  if !get_status.nil?
    ip=@wan_ip
    new_ip='0.0.0.0'
    loop do
      change_mac(@next_mac)
      sleep 15
      loop do
        get_status
        new_ip=@wan_ip
        sleep 5
        if new_ip!='0.0.0.0'
          print "[#{ip} -> #{new_ip}] "
        end
        break if new_ip!='0.0.0.0'
      end
      break if new_ip!=ip
    end
  else
    puts "Authorization Failed!"
  end
end
change_mac(new_mac) click to toggle source
# File lib/tp_link_commander.rb, line 37
def change_mac(new_mac)
  get("userRpm/MacCloneCfgRpm.htm?mac1=#{new_mac}&wan=1&Save=%25E5%2584%25B2%25E5%25AD%2598")
end
get(url) click to toggle source
# File lib/tp_link_commander.rb, line 14
def get(url)
  url = URI("http://#{@local_ip}/#{url}")
  http = Net::HTTP.new(url.host, url.port)
  request = Net::HTTP::Get.new(url)
  request["Authorization"] = get_auth
  response = http.request(request)
end
get_auth() click to toggle source
# File lib/tp_link_commander.rb, line 11
def get_auth
  "Basic #{Base64.encode64("#{@login}:#{@pass}").gsub(/[^A-Za-z0-9=]/,"")}"
end
get_status() click to toggle source
# File lib/tp_link_commander.rb, line 24
def get_status
  response=get("userRpm/StatusRpm.htm")
  result=response.read_body
  if result =~ /#errorbody/
    nil
  else
    params=result.gsub(/^[\S\s]+wanPara\s=\snew\sArray\(|\);[\S\s]+$/,"").split(/"?\s*,\s*"?/)
    @mac=params[1]
    @next_mac=next_hex(@mac)
    @wan_ip=params[2]
    params
  end
end
next_hex(hex) click to toggle source
# File lib/tp_link_commander.rb, line 21
def next_hex(hex)
  ("0x#{hex.gsub(/\-/,"")}".to_i(16)+1).to_s(16).upcase.scan(/../).join("-")
end