Class Dnsruby::IPv6
In: lib/Dnsruby/ipv6.rb
Parent: Object
Message Update ResolvError EncodeError OtherResolvError ServFail FormErr DecodeError NXRRSet YXDomain NotImp NXDomain VerifyError NotAuth YXRRSet NotZone Refused TsigError CodeMapper Types MetaTypes QTypes Nsec3HashAlgorithms Algorithms OpCode Classes ExtendedRCode Modes RCode Comparable Name RRSet TsigNotSignedResponseError Resolver SingleResolver StandardError TimeoutError ResolvTimeout DNS Dnssec Hosts RR\n[lib/Dnsruby/resource/A.rb\nlib/Dnsruby/resource/AAAA.rb\nlib/Dnsruby/resource/AFSDB.rb\nlib/Dnsruby/resource/CERT.rb\nlib/Dnsruby/resource/DHCID.rb\nlib/Dnsruby/resource/DLV.rb\nlib/Dnsruby/resource/DNSKEY.rb\nlib/Dnsruby/resource/DS.rb\nlib/Dnsruby/resource/HINFO.rb\nlib/Dnsruby/resource/HIP.rb\nlib/Dnsruby/resource/IN.rb\nlib/Dnsruby/resource/IPSECKEY.rb\nlib/Dnsruby/resource/ISDN.rb\nlib/Dnsruby/resource/KX.rb\nlib/Dnsruby/resource/LOC.rb\nlib/Dnsruby/resource/MINFO.rb\nlib/Dnsruby/resource/MX.rb\nlib/Dnsruby/resource/NAPTR.rb\nlib/Dnsruby/resource/NSAP.rb\nlib/Dnsruby/resource/NSEC.rb\nlib/Dnsruby/resource/NSEC3.rb\nlib/Dnsruby/resource/NSEC3PARAM.rb\nlib/Dnsruby/resource/OPT.rb\nlib/Dnsruby/resource/PX.rb\nlib/Dnsruby/resource/RP.rb\nlib/Dnsruby/resource/RRSIG.rb\nlib/Dnsruby/resource/RT.rb\nlib/Dnsruby/resource/SOA.rb\nlib/Dnsruby/resource/SPF.rb\nlib/Dnsruby/resource/SRV.rb\nlib/Dnsruby/resource/SSHFP.rb\nlib/Dnsruby/resource/TKEY.rb\nlib/Dnsruby/resource/TSIG.rb\nlib/Dnsruby/resource/TXT.rb\nlib/Dnsruby/resource/X25.rb\nlib/Dnsruby/resource/domain_name.rb\nlib/Dnsruby/resource/generic.rb\nlib/Dnsruby/resource/resource.rb] Recursor IPv6 IPv4 ZoneTransfer MessageDecoder MessageEncoder Question Header TheLog ValidatorThread PacketSender ResolverRuby Config KeyCache Cache SingleVerifier SelectThread Resolv ZoneReader lib/Dnsruby/DNS.rb lib/Dnsruby/dnssec.rb lib/Dnsruby/Hosts.rb lib/Dnsruby/resource/generic.rb lib/Dnsruby/Recursor.rb lib/Dnsruby/update.rb lib/Dnsruby/ipv6.rb lib/Dnsruby/ipv4.rb lib/Dnsruby/code_mapper.rb lib/Dnsruby/zone_transfer.rb lib/Dnsruby/message.rb lib/Dnsruby/TheLog.rb lib/Dnsruby/resource/resource.rb lib/Dnsruby/validator_thread.rb lib/Dnsruby/PacketSender.rb lib/Dnsruby/Resolver.rb lib/Dnsruby/Config.rb lib/Dnsruby/key_cache.rb lib/Dnsruby/Cache.rb lib/Dnsruby/single_verifier.rb lib/Dnsruby/SingleResolver.rb lib/Dnsruby/select_thread.rb lib/Dnsruby/name.rb lib/dnsruby.rb lib/Dnsruby/resource/TKEY.rb lib/Dnsruby/zone_reader.rb Dnsruby dot/m_61_0.png

Methods

create   hash   to_name   to_s  

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   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

Attributes

address  [R]  The raw IPv6 address as a String

Public Class methods

 Created 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/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

Public Instance methods

[Source]

     # File lib/Dnsruby/ipv6.rb, line 140
140:     def hash
141:       return @address.hash
142:     end

Turns this IPv6 address into a Dnsruby::Name

[Source]

     # 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

[Source]

     # File lib/Dnsruby/ipv6.rb, line 111
111:     def to_s
112:       address = sprintf("%X:%X:%X:%X:%X:%X:%X:%X", *@address.unpack("nnnnnnnn"))
113:       unless address.sub!(/(^|:)0(:0)+(:|$)/, '::')
114:         address.sub!(/(^|:)0(:|$)/, '::')
115:       end
116:       return address
117:     end

[Validate]