Class IPAddress::IPv6::Mapped
In: lib/ipaddress/ipv6.rb
Parent: IPAddress::IPv6

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 "::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 "::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.

Methods

mapped?   new   to_s   to_string  

Attributes

ipv4  [R]  Access the internal IPv4 address

Public Class methods

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"

Public Instance methods

Checks if the IPv6 address is IPv4 mapped

  ip6 = IPAddress "::ffff:172.16.10.1/128"

  ip6.mapped?
    #=> true

Similar to IPv6#to_s, but prints out the IPv4 address in dotted decimal format

  ip6 = IPAddress "::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 "::ffff:172.16.10.1/128"

  ip6.to_string
    #=> "::ffff:172.16.10.1/128"

[Validate]