Packages
mob_dev
0.6.5
0.6.23
0.6.22
0.6.21
0.6.20
0.6.19
0.6.18
0.6.17
0.6.16
0.6.15
0.6.14
0.6.13
0.6.12
0.6.11
0.6.10
0.6.9
0.6.8
0.6.7
0.6.6
0.6.5
0.6.4
0.6.3
0.6.2
0.6.1
0.6.0
0.5.17
0.5.16
0.5.15
0.5.14
0.5.13
0.5.12
0.5.11
0.5.10
0.5.9
0.5.8
0.5.7
0.5.6
0.5.5
0.5.4
0.5.3
0.5.2
0.5.1
0.5.0
0.4.0
0.3.37
0.3.35
0.3.34
0.3.33
0.3.28
0.3.26
0.3.23
0.3.21
0.3.19
0.3.18
0.3.17
0.3.16
0.3.15
0.3.14
0.3.13
0.3.12
0.3.11
0.3.10
0.3.9
0.3.8
0.3.7
0.3.6
0.3.5
0.3.4
0.3.3
0.3.2
0.3.1
0.3.0
0.2.18
0.2.17
0.2.15
0.2.14
0.2.13
0.2.12
0.2.11
0.2.10
0.2.9
0.2.8
0.2.7
0.2.6
0.2.5
0.2.4
0.2.3
0.2.2
0.2.1
0.2.0
0.1.0
Development tooling for the Mob mobile framework
Current section
Files
Jump to
Current section
Files
lib/mob_dev/network.ex
defmodule MobDev.Network do
@moduledoc "Network utilities for mob_dev."
@doc """
Returns the first LAN IPv4 address found on this machine, or nil.
Skips loopback. Matches 10.x, 192.168.x, and 172.16-31.x ranges.
"""
@spec lan_ip() :: :inet.ip4_address() | nil
def lan_ip do
case :inet.getif() do
{:ok, ifaces} ->
ifaces
|> Enum.map(fn {ip, _broadcast, _mask} -> ip end)
|> first_lan_ip()
_ ->
nil
end
end
@doc "Returns the first LAN IP from a list of IP tuples, or nil."
@spec first_lan_ip([:inet.ip4_address()]) :: :inet.ip4_address() | nil
def first_lan_ip(ips), do: Enum.find(ips, &lan_ip?/1)
@doc "Returns true if the IP tuple is a private LAN address (non-loopback)."
@spec lan_ip?(:inet.ip_address()) :: boolean()
def lan_ip?({127, _, _, _}), do: false
def lan_ip?({10, _, _, _}), do: true
def lan_ip?({172, b, _, _}), do: b >= 16 and b <= 31
def lan_ip?({192, 168, _, _}), do: true
def lan_ip?(_), do: false
end