| Class | Dnsruby::IPv6 |
| In: |
lib/Dnsruby/ipv6.rb
|
| Parent: | Object |
Dnsruby::IPv6 class
| 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 | Compresses IPv6 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 |
| address | [R] | The raw IPv6 address as a String |
Created a new IPv6 address from +arg+ which may be:
# File lib/Dnsruby/ipv6.rb, line 55
55: def self.create(arg)
56: case arg
57: when IPv6
58: return arg
59: when String
60: address = ''
61: if Regex_8Hex =~ arg
62: arg.scan(/[0-9A-Fa-f]+/) {|hex| address << [hex.hex].pack('n')}
63: elsif Regex_CompressedHex =~ arg
64: prefix = $1
65: suffix = $2
66: a1 = ''
67: a2 = ''
68: prefix.scan(/[0-9A-Fa-f]+/) {|hex| a1 << [hex.hex].pack('n')}
69: suffix.scan(/[0-9A-Fa-f]+/) {|hex| a2 << [hex.hex].pack('n')}
70: omitlen = 16 - a1.length - a2.length
71: address << a1 << "\0" * omitlen << a2
72: elsif Regex_6Hex4Dec =~ arg
73: prefix, a, b, c, d = $1, $2.to_i, $3.to_i, $4.to_i, $5.to_i
74: if (0..255) === a && (0..255) === b && (0..255) === c && (0..255) === d
75: prefix.scan(/[0-9A-Fa-f]+/) {|hex| address << [hex.hex].pack('n')}
76: address << [a, b, c, d].pack('CCCC')
77: else
78: raise ArgumentError.new("not numeric IPv6 address: " + arg)
79: end
80: elsif Regex_CompressedHex4Dec =~ arg
81: prefix, suffix, a, b, c, d = $1, $2, $3.to_i, $4.to_i, $5.to_i, $6.to_i
82: if (0..255) === a && (0..255) === b && (0..255) === c && (0..255) === d
83: a1 = ''
84: a2 = ''
85: prefix.scan(/[0-9A-Fa-f]+/) {|hex| a1 << [hex.hex].pack('n')}
86: suffix.scan(/[0-9A-Fa-f]+/) {|hex| a2 << [hex.hex].pack('n')}
87: omitlen = 12 - a1.length - a2.length
88: address << a1 << "\0" * omitlen << a2 << [a, b, c, d].pack('CCCC')
89: else
90: raise ArgumentError.new("not numeric IPv6 address: " + arg)
91: end
92: else
93: raise ArgumentError.new("not numeric IPv6 address: " + arg)
94: end
95: return IPv6.new(address)
96: else
97: raise ArgumentError.new("cannot interpret as IPv6 address: #{arg.inspect}")
98: end
99: end
Turns this IPv6 address into a Dnsruby::Name
# File lib/Dnsruby/ipv6.rb, line 126
126: def to_name
127: return Name.create(
128: # @address.unpack("H32")[0].split(//).reverse + ['ip6', 'arpa'])
129: @address.unpack("H32")[0].split(//).reverse.join(".") + ".ip6.arpa")
130: end