Class: IPSocket

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

Class Method Summary collapse

Class Method Details

.getaddress(s) ⇒ Object

Returns a String based representation of a valid DNS hostname, IPv4 or IPv6 address.

IPSocket.getaddress 'localhost'         #=> "::1"
IPSocket.getaddress 'broadcasthost'     #=> "255.255.255.255"
IPSocket.getaddress 'www.ruby-lang.org' #=> "221.186.184.68"
IPSocket.getaddress 'www.ccc.de'        #=> "2a00:1328:e102:ccc0::122"


63
64
65
66
67
68
69
70
71
# File 'lib/ipaddr.rb', line 63

def getaddress(s)
  if valid?(s)
    s
  elsif /\A[-A-Za-z\d.]+\Z/ =~ s
    getaddress_orig(s)
  else
    raise ArgumentError, "invalid address"
  end
end

.getaddress_origObject



54
# File 'lib/ipaddr.rb', line 54

alias getaddress_orig getaddress

.valid?(addr) ⇒ Boolean

Returns true if addr is either a valid IPv4 or IPv6 address.

Returns:

  • (Boolean)


50
51
52
# File 'lib/ipaddr.rb', line 50

def valid?(addr)
  valid_v4?(addr) || valid_v6?(addr)
end

.valid_v4?(addr) ⇒ Boolean

Returns true if addr is a valid IPv4 address.

Returns:

  • (Boolean)


28
29
30
31
32
33
# File 'lib/ipaddr.rb', line 28

def valid_v4?(addr)
  if /\A(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\Z/ =~ addr
    return $~.captures.all? {|i| i.to_i < 256}
  end
  return false
end

.valid_v6?(addr) ⇒ Boolean

Returns true if addr is a valid IPv6 address.

Returns:

  • (Boolean)


36
37
38
39
40
41
42
43
44
45
46
47
# File 'lib/ipaddr.rb', line 36

def valid_v6?(addr)
  # IPv6 (normal)
  return true if /\A[\dA-Fa-f]{1,4}(:[\dA-Fa-f]{1,4})*\Z/ =~ addr
  return true if /\A[\dA-Fa-f]{1,4}(:[\dA-Fa-f]{1,4})*::([\dA-Fa-f]{1,4}(:[\dA-Fa-f]{1,4})*)?\Z/ =~ addr
  return true if /\A::([\dA-Fa-f]{1,4}(:[\dA-Fa-f]{1,4})*)?\Z/ =~ addr
  # IPv6 (IPv4 compat)
  return true if /\A[\dA-Fa-f]{1,4}(:[\dA-Fa-f]{1,4})*:/ =~ addr && valid_v4?($')
  return true if /\A[\dA-Fa-f]{1,4}(:[\dA-Fa-f]{1,4})*::([\dA-Fa-f]{1,4}(:[\dA-Fa-f]{1,4})*:)?/ =~ addr && valid_v4?($')
  return true if /\A::([\dA-Fa-f]{1,4}(:[\dA-Fa-f]{1,4})*:)?/ =~ addr && valid_v4?($')

  false
end