Class: UltraDNSUpdater::IpInfo

Inherits:
Object
  • Object
show all
Defined in:
lib/ultradns_updater/ip_info.rb

Class Method Summary collapse

Class Method Details

.ifconfig(iface) ⇒ Object



60
61
62
63
64
65
66
67
68
69
# File 'lib/ultradns_updater/ip_info.rb', line 60

def self.ifconfig(iface)
  result = nil
  begin
    result = `ifconfig #{iface}`
  rescue 
    # try full path
    result = `/sbin/ifconfig #{iface}`
  end
  result
end

.ipv4_for_iface(iface) ⇒ Object



30
31
32
33
34
35
36
37
# File 'lib/ultradns_updater/ip_info.rb', line 30

def self.ipv4_for_iface(iface)
  result = ifconfig(iface)
  if result
    addrs = []
    result.split("\n").collect {|line| line.strip}.select {|i| i =~ /^inet /}.each {|addr| addrs << addr.split(" ")[1] }
  end
  addrs.first
end

.ipv6_for_iface(iface) ⇒ Object



39
40
41
42
43
44
45
46
# File 'lib/ultradns_updater/ip_info.rb', line 39

def self.ipv6_for_iface(iface)
  result = ifconfig(iface)
  if result
    addrs = []
    result.split("\n").collect {|line| line.strip}.select {|i| i =~ /^inet6/}.each {|addr| addrs << addr.split(" ")[1].gsub(/%.*/,'') }
  end
  addrs.first
end

.local_ip(host) ⇒ Object



49
50
51
52
53
54
55
56
57
58
# File 'lib/ultradns_updater/ip_info.rb', line 49

def self.local_ip(host)
  socket_type = (host =~ /\:/) ? Socket::AF_INET6 : Socket::AF_INET
  orig, Socket.do_not_reverse_lookup = Socket.do_not_reverse_lookup, true  # turn off reverse DNS resolution temporarily
  UDPSocket.open(socket_type) do |s|
    s.connect host, 1
    s.addr.last
  end
ensure
  Socket.do_not_reverse_lookup = orig
end

.local_ipv4Object



19
20
21
22
# File 'lib/ultradns_updater/ip_info.rb', line 19

def self.local_ipv4
  # pdns1.ultradns.net.	IN	A	204.74.108.1
  local_ip('204.74.108.1')
end

.local_ipv6Object



24
25
26
27
28
# File 'lib/ultradns_updater/ip_info.rb', line 24

def self.local_ipv6
  # pdns1.ultradns.net.	IN	AAAA	2001:502:f3ff::1
  # 2001:502:f3ff:0:0:0:0:1
  local_ip('2001:502:f3ff::1')
end