IP.Address (ip v1.2.0)
Simple representations of IP Addresses.
Link to this section Summary
Types
Valid IP address
Valid IPv4 address - integer between zero and 32 ones.
Valid IPv6 address - integer between zero and 128 ones.
IP address struct type, contains a valid address and version.
Valid IP version (currently only 4 and 6 are deployed in the wild).
Functions
Returns true if the address is an EUI-64 address.
Return a MAC address coded in an EUI-64 address.
Convert a 6to4 IPv6 address to it's correlated IPv6 address.
Convert from (packed) binary representations (either 32 or 128 bits long) into an address.
Convert from a packed binary presentation to an address or raise an
IP.Address.InvalidAddress
exception.
Convert an integer into an IP address of specified version.
Convert an integer into an IP address of specified version or raise an
IP.Address.InvalidAddress
exception.
Convert a string representation into an IP address of unknown version.
Convert a string representation into an IP address of specified version.
Convert a string representation into an IP address or raise an
IP.Address.InvalidAddress
exception.
Convert a string representation into an IP address of specified version or raise an
IP.Address.InvalidAddress
exception.
Convert an Erlang-style tuple of bytes to an address.
Convert an Erlang-style tuple of bytes to an address.
Generate an IPv6 Unique Local Address
Determine if the IP address is a 6to4 address.
Determine if an IP address is a teredo connection.
Return information about a teredo connection.
Convert an IPv4 address into a 6to4 address.
Returns the IP Address as an integer
Convert an address
to an IP.Prefix
.
Convert an address
into a string.
Returns true if address
is version 4.
Returns true if address
is version 6.
Returns the IP version of the address.
Link to this section Types
ip()
Specs
Valid IP address
ipv4()
Specs
ipv4() :: 0..4_294_967_295
Valid IPv4 address - integer between zero and 32 ones.
ipv6()
Specs
ipv6() :: 0..340_282_366_920_938_463_463_374_607_431_768_211_455
Valid IPv6 address - integer between zero and 128 ones.
Specs
IP address struct type, contains a valid address and version.
version()
Specs
version() :: 4 | 6
Valid IP version (currently only 4 and 6 are deployed in the wild).
Link to this section Functions
eui_64?(address)
Specs
Returns true if the address is an EUI-64 address.
examples
Examples
iex> ~i(2001:db8::62f8:1dff:fead:d890)
...> |> IP.Address.eui_64?()
true
eui_64_mac(address)
Specs
Return a MAC address coded in an EUI-64 address.
examples
Examples
iex> ~i(2001:db8::62f8:1dff:fead:d890)
...> |> IP.Address.eui_64_mac()
{:ok, "60f8.1dad.d890"}
from_6to4(address)
Specs
Convert a 6to4 IPv6 address to it's correlated IPv6 address.
examples
Examples
iex> ~i(2002:c000:201::)
...> |> IP.Address.from_6to4()
...> |> inspect()
"{:ok, #IP.Address<192.0.2.1 DOCUMENTATION>}"
iex> ~i(2001:db8::)
...> |> IP.Address.from_6to4()
{:error, "Not a 6to4 address"}
from_binary(arg1)
Specs
Convert from (packed) binary representations (either 32 or 128 bits long) into an address.
examples
Examples
iex> <<192, 0, 2, 1>>
...> |> IP.Address.from_binary()
{:ok, %IP.Address{address: 3221225985, version: 4}}
iex> <<32, 1, 13, 184, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0>>
...> |> IP.Address.from_binary()
{:ok, %IP.Address{address: 42540766411282592856903984951653826560, version: 6}}
iex> "192.0.2.1"
...> |> IP.Address.from_binary()
{:error, "Unable to convert binary to address"}
from_binary!(address)
Specs
Convert from a packed binary presentation to an address or raise an
IP.Address.InvalidAddress
exception.
examples
Examples
iex> <<192, 0, 2, 1>>
...> |> IP.Address.from_binary!()
%IP.Address{address: 3221225985, version: 4}
iex> <<32, 1, 13, 184, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1>>
...> |> IP.Address.from_binary!()
%IP.Address{address: 42540766411282592856903984951653826561, version: 6}
from_integer(address, version)
Specs
Convert an integer into an IP address of specified version.
examples
Examples
iex> 3221225985
...> |> IP.Address.from_integer(4)
{:ok, %IP.Address{address: 3221225985, version: 4}}
iex> 42540766411282592856903984951653826561
...> |> IP.Address.from_integer(6)
{:ok, %IP.Address{address: 42540766411282592856903984951653826561, version: 6}}
from_integer!(address, version)
Specs
Convert an integer into an IP address of specified version or raise an
IP.Address.InvalidAddress
exception.
examples
Examples
iex> 3221225985
...> |> IP.Address.from_integer!(4)
%IP.Address{address: 3221225985, version: 4}
iex> 42540766411282592856903984951653826561
...> |> IP.Address.from_integer!(6)
%IP.Address{address: 42540766411282592856903984951653826561, version: 6}
from_string(address)
Specs
Convert a string representation into an IP address of unknown version.
Tries to parse the string as IPv6, then IPv4 before failing. Obviously if
you know the version then using from_string/2
is faster.
examples
Examples
iex> "192.0.2.1"
...> |> IP.Address.from_string()
{:ok, %IP.Address{address: 3221225985, version: 4}}
iex> "2001:db8::1"
...> |> IP.Address.from_string()
{:ok, %IP.Address{address: 42540766411282592856903984951653826561, version: 6}}
from_string(address, version)
Specs
Convert a string representation into an IP address of specified version.
examples
Examples
iex> "192.0.2.1"
...> |> IP.Address.from_string(4)
{:ok, %IP.Address{address: 3221225985, version: 4}}
iex> "2001:db8::1"
...> |> IP.Address.from_string(6)
{:ok, %IP.Address{address: 42540766411282592856903984951653826561, version: 6}}
from_string!(address)
Specs
Convert a string representation into an IP address or raise an
IP.Address.InvalidAddress
exception.
examples
Examples
iex> "192.0.2.1"
...> |> IP.Address.from_string!()
%IP.Address{address: 3221225985, version: 4}
iex> "2001:db8::1"
...> |> IP.Address.from_string!()
%IP.Address{address: 42540766411282592856903984951653826561, version: 6}
from_string!(address, version)
Specs
Convert a string representation into an IP address of specified version or raise an
IP.Address.InvalidAddress
exception.
examples
Examples
iex> "192.0.2.1"
...> |> IP.Address.from_string!(4)
%IP.Address{address: 3221225985, version: 4}
iex> "2001:db8::1"
...> |> IP.Address.from_string!(6)
%IP.Address{address: 42540766411282592856903984951653826561, version: 6}
from_tuple(arg1)
Specs
from_tuple(:socket.in_addr() | :socket.in6_addr()) :: {:ok, t()} | {:error, term()}
Convert an Erlang-style tuple of bytes to an address.
examples
Examples
iex> {192, 0, 2, 1}
...> |> IP.Address.from_tuple()
{:ok, %IP.Address{address: 3221225985, version: 4}}
iex> {8193, 3512, 0, 0, 0, 0, 0, 1}
...> |> IP.Address.from_tuple()
{:ok, %IP.Address{address: 42540766411282592856903984951653826561, version: 6}}
from_tuple!(tuple)
Specs
from_tuple!(:socket.in_addr() | :socket.in6_addr()) :: t() | no_return()
Convert an Erlang-style tuple of bytes to an address.
examples
Examples
iex> {192, 0, 2, 1}
...> |> IP.Address.from_tuple!()
%IP.Address{address: 3221225985, version: 4}
iex> {8193, 3512, 0, 0, 0, 0, 0, 1}
...> |> IP.Address.from_tuple!()
%IP.Address{address: 42540766411282592856903984951653826561, version: 6}
generate_ula(mac, subnet_id \\ 0, locally_assigned \\ true)
Specs
generate_ula(binary(), non_neg_integer(), boolean()) :: {:ok, t()} | {:error, term()}
Generate an IPv6 Unique Local Address
Note that the MAC address is just used as a source of randomness, so where you get it from is not important and doesn't restrict this ULA to just that system. See RFC4193
examples
Examples
iex> IP.Address.generate_ula("60:f8:1d:ad:d8:90")
#IP.Address<fd29:f1ef:86a1::>
is_6to4?(address)
Specs
Determine if the IP address is a 6to4 address.
examples
Examples
iex> ~i(2002:c000:201::)
...> |> IP.Address.is_6to4?()
true
iex> ~i(2001:db8::)
...> |> IP.Address.is_6to4?()
false
is_teredo?(address)
Specs
Determine if an IP address is a teredo connection.
examples
Examples
iex> ~i(2001::)
...> |> IP.Address.is_teredo?()
true
teredo(address)
Specs
Return information about a teredo connection.
examples
Examples
iex> ~i(2001:0:4136:e378:8000:63bf:3fff:fdd2)
...> |> IP.Address.teredo()
...> |> Map.get(:server)
#IP.Address<65.54.227.120 GLOBAL UNICAST>
iex> ~i(2001:0:4136:e378:8000:63bf:3fff:fdd2)
...> |> IP.Address.teredo()
...> |> Map.get(:client)
#IP.Address<63.255.253.210 GLOBAL UNICAST>
iex> ~i(2001:0:4136:e378:8000:63bf:3fff:fdd2)
...> |> IP.Address.teredo()
...> |> Map.get(:port)
25535
to_6to4(address)
Specs
Convert an IPv4 address into a 6to4 address.
examples
Examples
iex> ~i(192.0.2.1)
...> |> IP.Address.to_6to4()
#IP.Address<2002:c000:201:: GLOBAL UNICAST (6to4)>
to_integer(address)
Specs
Returns the IP Address as an integer
examples
Examples
iex> ~i(192.0.2.1)
...> |> IP.Address.to_integer()
3221225985
iex> ~i(2001:db8::1)
...> |> IP.Address.to_integer()
42540766411282592856903984951653826561
to_prefix(address, length)
Specs
to_prefix(t(), IP.Prefix.prefix_length()) :: IP.Prefix.t()
Convert an address
to an IP.Prefix
.
examples
Examples
iex> ~i(192.0.2.1)
...> |> IP.Address.to_prefix(32)
#IP.Prefix<192.0.2.1/32 DOCUMENTATION>
to_string(address)
Specs
Convert an address
into a string.
examples
Examples
iex> ~i(192.0.2.1)
...> |> IP.Address.to_string()
"192.0.2.1"
iex> ~i(2001:db8::1)
...> |> IP.Address.to_string()
"2001:db8::1"
v4?(address)
Specs
Returns true if address
is version 4.
examples
Examples
iex> ~i(192.0.2.1)
...> |> IP.Address.v4?
true
iex> ~i(2001:db8::)
...> |> IP.Address.v4?
false
v6?(address)
Specs
Returns true if address
is version 6.
examples
Examples
iex> ~i(192.0.2.1)
...> |> IP.Address.v6?
false
iex> ~i(2001:db8::)
...> |> IP.Address.v6?
true
version(address)
Specs
Returns the IP version of the address.
examples
Examples
iex> ~i(192.0.2.1)
...> |> IP.Address.version()
4
iex> ~i(2001:db8::1)
...> |> IP.Address.version()
6