class IPAddress::IPv6::Mapped
- IPAddress::IPv6::Mapped
- IPAddress::IPv6
- Reference
- Object
Overview
It is usually identified as a IPv4 mapped IPv6 address, a particular IPv6 address which aids the transition from IPv4 to IPv6. The structure of the address is
::ffff:w.y.x.z
where w.x.y.z
is a normal IPv4 address. For example, the following is
a mapped IPv6 address:
::ffff:192.168.100.1
IPAddress
is very powerful in handling mapped IPv6 addresses, as the
IPv4 portion is stored internally as a normal IPv4
object. Let's have
a look at some examples. To create a new mapped address, just use the
class builder itself
ip6 = IPAddress::IPv6::Mapped.new "::ffff:172.16.10.1/128"
or just use the wrapper method
ip6 = IPAddress.new "::ffff:172.16.10.1/128"
Let's check it's really a mapped address:
ip6.mapped? # => true
ip6.to_string # => "::ffff:172.16.10.1/128"
Now with the ipv4 attribute, we can easily access the IPv4 portion of the mapped IPv6 address:
ip6.ipv4.address # => "172.16.10.1"
Internally, the IPv4 address is stored as two 16 bits groups. Therefore all the usual methods for an IPv6 address are working perfectly fine:
ip6.to_hex # => "00000000000000000000ffffac100a01"
ip6.address # => "0000:0000:0000:0000:0000:ffff:ac10:0a01"
A mapped IPv6 can also be created just by specify the address in the following format:
ip6 = IPAddress.new "::172.16.10.1"
That is, two colons and the IPv4 address. However, as by RFC, the ffff
group will be automatically added at the beginning
ip6.to_string # => "::ffff:172.16.10.1/128"
making it a mapped IPv6 compatible address.
Defined in:
ipaddress/ipv6_mapped.crConstructors
-
.new(addr : String, netmask = nil)
Creates a new IPv6 IPv4-mapped address.
Instance Method Summary
-
#ipv4 : IPv4
Internal
IPv4
address. -
#mapped?
Returns
true
if the address is a mapped address. -
#to_s(io : IO)
Similar to
IPv6#to_s(io)
, but appends the IPv4 address in dotted decimal format. -
#to_string : String
Similar to
IPv6#to_string
, but prints out the IPv4 address in dotted decimal format.
Instance methods inherited from class IPAddress::IPv6
<=>(other : IPv6)
<=>,
==(other : self)
==,
[](index : Int32) : Int32
[],
[]=(index : Int32, value : Int32) : Nil
[]=,
address : String
address,
bits : String
bits,
broadcast_u128 : BigInt
broadcast_u128,
compressed : String
compressed,
data : Bytes
data,
each(&) : Nil
each,
groups : Array(Int32)
groups,
hash(hasher)
hash,
hexs : Array(String)
hexs,
includes?(others : Array(IPv6))includes?(other)
includes?(*others : IPv6) includes?, link_local? link_local?, literal : String literal, loopback? loopback?, mapped? mapped?, network : IPv6 network, network? network?, network_u128 : BigInt network_u128, pred : IPv6 pred, prefix : Prefix128 prefix, prefix=(prefix : Int32) : Prefix128 prefix=, reverse : String reverse, size : BigInt size, succ : IPv6 succ, to_big_i : BigInt to_big_i, to_hex : String to_hex, to_s(io : IO) to_s, to_string : String to_string, to_string_uncompressed : String to_string_uncompressed, unique_local? unique_local?, unspecified? unspecified?
Constructor methods inherited from class IPAddress::IPv6
new(addr : String, netmask = nil)
new,
parse_data(data : Bytes, prefix = 128) : IPv6
parse_data,
parse_hex(hex : String, prefix = 128) : IPv6
parse_hex,
parse_u128(u128 : BigInt, prefix = 128) : IPv6
parse_u128
Class methods inherited from class IPAddress::IPv6
compress(addr : String) : String
compress,
expand(addr : String) : String
expand,
groups(addr : String) : Array(Int32)
groups,
valid?(addr : String)
valid?
Instance methods inherited from module IPAddress
ipv4?
ipv4?,
ipv6?
ipv6?
Constructor methods inherited from module IPAddress
new(addr : String | Int) : IPAddress
new,
parse(addr : String | Int) : IPAddress
parse
Class methods inherited from module IPAddress
aton(addr : String) : UInt32
aton,
ntoa(uint : UInt32) : Stringntoa(int : Int) : String ntoa, valid?(addr : String) valid?, valid_ipv4?(addr : String) valid_ipv4?, valid_ipv4_netmask?(addr : String) valid_ipv4_netmask?, valid_ipv6?(addr : String) valid_ipv6?
Constructor Detail
Creates a new IPv6 IPv4-mapped address.
ip6 = IPAddress::IPv6::Mapped.new "::ffff:172.16.10.1/128"
ipv6.ipv4.class # => IPAddress::IPv4
An IPv6 IPv4-mapped address can also be created using the IPv6 only format of the address:
ip6 = IPAddress::IPv6::Mapped.new "::0d01:4403"
ip6.to_string # => "::ffff:13.1.68.3"
Instance Method Detail
Returns true
if the address is a mapped address.
ip6 = IPAddress.new "::ffff:172.16.10.1/128"
ip6.mapped? # => true
Similar to IPv6#to_s(io)
, but appends the IPv4 address
in dotted decimal format.
ip6 = IPAddress.new "::ffff:172.16.10.1/128"
ip6.to_s # => "::ffff:172.16.10.1"
Similar to IPv6#to_string
, but prints out the IPv4 address
in dotted decimal format.
ip6 = IPAddress.new "::ffff:172.16.10.1/128"
ip6.to_string # => "::ffff:172.16.10.1/128"