Class: IPSocket

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

Class Method Summary collapse

Class Method Details

.getaddress(s) ⇒ Object



46
47
48
49
50
51
52
53
54
# File 'lib/ipaddr.rb', line 46

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



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

alias getaddress_orig getaddress

.valid?(addr) ⇒ Boolean

Returns:

  • (Boolean)


41
42
43
# File 'lib/ipaddr.rb', line 41

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

.valid_v4?(addr) ⇒ Boolean

Returns:

  • (Boolean)


21
22
23
24
25
26
# File 'lib/ipaddr.rb', line 21

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:

  • (Boolean)


28
29
30
31
32
33
34
35
36
37
38
39
# File 'lib/ipaddr.rb', line 28

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