Class: IPSocket
- Inherits:
-
Object
- Object
- IPSocket
- Defined in:
- lib/ipaddr.rb
Class Method Summary collapse
-
.getaddress(s) ⇒ Object
Returns a
String
based representation of a valid DNS hostname, IPv4 or IPv6 address. - .getaddress_orig ⇒ Object
-
.valid?(addr) ⇒ Boolean
Returns
true
ifaddr
is either a valid IPv4 or IPv6 address. -
.valid_v4?(addr) ⇒ Boolean
Returns
true
ifaddr
is a valid IPv4 address. -
.valid_v6?(addr) ⇒ Boolean
Returns
true
ifaddr
is a valid IPv6 address.
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_orig ⇒ Object
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.
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.
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.
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 |