Class Resolv::IPv6
In: lib/resolv.rb
Parent: Object

A Resolv::DNS IPv6 address.

Methods

create   to_name  

Constants

Regex_8Hex = /\A (?:[0-9A-Fa-f]{1,4}:){7} [0-9A-Fa-f]{1,4} \z/x   IPv6 address format a:b:c:d:e:f:g:h
Regex_CompressedHex = /\A ((?:[0-9A-Fa-f]{1,4}(?::[0-9A-Fa-f]{1,4})*)?) :: ((?:[0-9A-Fa-f]{1,4}(?::[0-9A-Fa-f]{1,4})*)?) \z/x   Compressed IPv6 address format a::b
Regex_6Hex4Dec = /\A ((?:[0-9A-Fa-f]{1,4}:){6,6}) (\d+)\.(\d+)\.(\d+)\.(\d+) \z/x   IPv4 mapped IPv6 address format a:b:c:d:e:f:w.x.y.z
Regex_CompressedHex4Dec = /\A ((?:[0-9A-Fa-f]{1,4}(?::[0-9A-Fa-f]{1,4})*)?) :: ((?:[0-9A-Fa-f]{1,4}:)*) (\d+)\.(\d+)\.(\d+)\.(\d+) \z/x   Compressed IPv4 mapped IPv6 address format a::b:w.x.y.z
Regex = / (?:#{Regex_8Hex}) | (?:#{Regex_CompressedHex}) | (?:#{Regex_6Hex4Dec}) | (?:#{Regex_CompressedHex4Dec})/x   A composite IPv6 address Regexp.

Attributes

address  [R]  The raw IPv6 address as a String.

Public Class methods

Creates a new IPv6 address from arg which may be:

IPv6:returns arg.
String:arg must match one of the IPv6::Regex* constants

[Source]

      # File lib/resolv.rb, line 2152
2152:     def self.create(arg)
2153:       case arg
2154:       when IPv6
2155:         return arg
2156:       when String
2157:         address = ''
2158:         if Regex_8Hex =~ arg
2159:           arg.scan(/[0-9A-Fa-f]+/) {|hex| address << [hex.hex].pack('n')}
2160:         elsif Regex_CompressedHex =~ arg
2161:           prefix = $1
2162:           suffix = $2
2163:           a1 = ''
2164:           a2 = ''
2165:           prefix.scan(/[0-9A-Fa-f]+/) {|hex| a1 << [hex.hex].pack('n')}
2166:           suffix.scan(/[0-9A-Fa-f]+/) {|hex| a2 << [hex.hex].pack('n')}
2167:           omitlen = 16 - a1.length - a2.length
2168:           address << a1 << "\0" * omitlen << a2
2169:         elsif Regex_6Hex4Dec =~ arg
2170:           prefix, a, b, c, d = $1, $2.to_i, $3.to_i, $4.to_i, $5.to_i
2171:           if (0..255) === a && (0..255) === b && (0..255) === c && (0..255) === d
2172:             prefix.scan(/[0-9A-Fa-f]+/) {|hex| address << [hex.hex].pack('n')}
2173:             address << [a, b, c, d].pack('CCCC')
2174:           else
2175:             raise ArgumentError.new("not numeric IPv6 address: " + arg)
2176:           end
2177:         elsif Regex_CompressedHex4Dec =~ arg
2178:           prefix, suffix, a, b, c, d = $1, $2, $3.to_i, $4.to_i, $5.to_i, $6.to_i
2179:           if (0..255) === a && (0..255) === b && (0..255) === c && (0..255) === d
2180:             a1 = ''
2181:             a2 = ''
2182:             prefix.scan(/[0-9A-Fa-f]+/) {|hex| a1 << [hex.hex].pack('n')}
2183:             suffix.scan(/[0-9A-Fa-f]+/) {|hex| a2 << [hex.hex].pack('n')}
2184:             omitlen = 12 - a1.length - a2.length
2185:             address << a1 << "\0" * omitlen << a2 << [a, b, c, d].pack('CCCC')
2186:           else
2187:             raise ArgumentError.new("not numeric IPv6 address: " + arg)
2188:           end
2189:         else
2190:           raise ArgumentError.new("not numeric IPv6 address: " + arg)
2191:         end
2192:         return IPv6.new(address)
2193:       else
2194:         raise ArgumentError.new("cannot interpret as IPv6 address: #{arg.inspect}")
2195:       end
2196:     end

Public Instance methods

Turns this IPv6 address into a Resolv::DNS::Name.

[Source]

      # File lib/resolv.rb, line 2227
2227:     def to_name
2228:       return DNS::Name.new(
2229:         @address.unpack("H32")[0].split(//).reverse + ['ip6', 'arpa'])
2230:     end

[Validate]