Package net.i2p.util

Class Addresses


  • public abstract class Addresses
    extends Object
    Methods to get the local addresses, and other IP utilities
    Since:
    0.8.3 moved to core from router/transport
    Author:
    zzz
    • Constructor Summary

      Constructors 
      Constructor Description
      Addresses()  
    • Method Summary

      All Methods Static Methods Concrete Methods 
      Modifier and Type Method Description
      static void clearCaches()  
      static SortedSet<String> getAddresses()
      Warning, very slow on Windows, appx.
      static SortedSet<String> getAddresses​(boolean includeLocal, boolean includeIPv6)
      Warning: When includeLocal is false, all returned addresses should be routable, but they are not necessarily appropriate for external use.
      static SortedSet<String> getAddresses​(boolean includeSiteLocal, boolean includeLoopbackAndWildcard, boolean includeIPv6)
      Warning: When includeSiteLocal and includeLoopbackAndWildcard are false, all returned addresses should be routable, but they are not necessarily appropriate for external use.
      static SortedSet<String> getAddresses​(boolean includeSiteLocal, boolean includeLoopbackAndWildcard, boolean includeIPv6, boolean includeIPv6Temporary)
      Warning: When includeSiteLocal and includeLoopbackAndWildcard are false, all returned addresses should be routable, but they are not necessarily appropriate for external use.
      static SortedSet<String> getAllAddresses()
      Warning, very slow on Windows, appx.
      static String getAnyAddress()
      Warning, very slow on Windows, appx.
      static byte[] getIP​(String host)
      Caching version of InetAddress.getByName(host).getAddress(), which is slow.
      static byte[] getIP​(String host, boolean preferIPv6)
      For literal IP addresses, this is the same as getIP(String).
      static byte[] getIPOnly​(String host)
      Caching version of InetAddress.getByName(host).getAddress(), which is slow.
      static List<byte[]> getIPs​(String host)
      For literal IP addresses, this is the same as getIP(String).
      static int getPort​(String port)
      Convenience method to convert and validate a port String without throwing an exception.
      static byte[] getYggdrasilAddress()
      Warning, very slow on Windows.
      static boolean isConnected()
      Do we have any non-loop, non-wildcard IPv4 address at all? Warning, very slow on Windows, appx.
      static boolean isConnectedIPv6()
      Do we have any non-loop, non-wildcard IPv6 address at all? Warning, very slow on Windows, appx.
      static boolean isDeprecated​(Inet6Address addr)
      Is this address deprecated? Should be reliable on Linux.
      static boolean isDynamic​(Inet6Address addr)
      Is this address dynamic? Should be reliable on Linux.
      static boolean isIPAddress​(String host)  
      static boolean isIPv4Address​(String host)  
      static boolean isIPv6Address​(String host)  
      static boolean isTemporary​(Inet6Address addr)
      Is this address temporary? Should be reliable on Linux.
      static void main​(String[] args)
      Print out the local addresses
      static String toString​(byte[] addr)
      Convenience method to convert an IP address to a String without throwing an exception.
      static String toString​(byte[] addr, int port)
      Convenience method to convert an IP address and port to a String without throwing an exception.
      static String useIPv6TempAddresses()  
    • Constructor Detail

      • Addresses

        public Addresses()
    • Method Detail

      • isConnected

        public static boolean isConnected()
        Do we have any non-loop, non-wildcard IPv4 address at all? Warning, very slow on Windows, appx. 200ms + 50ms/interface
        Since:
        0.9.4
      • isConnectedIPv6

        public static boolean isConnectedIPv6()
        Do we have any non-loop, non-wildcard IPv6 address at all? Warning, very slow on Windows, appx. 200ms + 50ms/interface
        Since:
        0.9.29
      • getAnyAddress

        public static String getAnyAddress()
        Warning, very slow on Windows, appx. 200ms + 50ms/interface
        Returns:
        the first non-local address IPv4 address it finds, or null
      • getAddresses

        public static SortedSet<String> getAddresses()
        Warning, very slow on Windows, appx. 200ms + 50ms/interface
        Returns:
        a sorted set of all addresses, excluding IPv6, local, broadcast, multicast, etc.
      • getAllAddresses

        public static SortedSet<String> getAllAddresses()
        Warning, very slow on Windows, appx. 200ms + 50ms/interface
        Returns:
        a sorted set of all addresses, excluding only link local and multicast
        Since:
        0.8.3
      • getAddresses

        public static SortedSet<String> getAddresses​(boolean includeLocal,
                                                     boolean includeIPv6)
        Warning: When includeLocal is false, all returned addresses should be routable, but they are not necessarily appropriate for external use. For example, Teredo and 6to4 addresses are included with IPv6 results. Additional validation is recommended. See e.g. TransportUtil.isPubliclyRoutable(). Warning, very slow on Windows, appx. 200ms + 50ms/interface
        Parameters:
        includeLocal - whether to include local addresses and deprecated IPv6 addresses
        includeIPv6 - whether to include IPV6
        Returns:
        a sorted set of all addresses including wildcard
        Since:
        0.8.3
      • getAddresses

        public static SortedSet<String> getAddresses​(boolean includeSiteLocal,
                                                     boolean includeLoopbackAndWildcard,
                                                     boolean includeIPv6)
        Warning: When includeSiteLocal and includeLoopbackAndWildcard are false, all returned addresses should be routable, but they are not necessarily appropriate for external use. For example, Teredo and 6to4 addresses are included with IPv6 results. Additional validation is recommended. See e.g. TransportUtil.isPubliclyRoutable(). Warning, very slow on Windows, appx. 200ms + 50ms/interface
        Parameters:
        includeSiteLocal - whether to include private like 192.168.x.x and deprecated IPv6 addresses
        includeLoopbackAndWildcard - whether to include 127.x.x.x and 0.0.0.0
        includeIPv6 - whether to include IPV6
        Returns:
        a sorted set of all addresses
        Since:
        0.9.4
      • getAddresses

        public static SortedSet<String> getAddresses​(boolean includeSiteLocal,
                                                     boolean includeLoopbackAndWildcard,
                                                     boolean includeIPv6,
                                                     boolean includeIPv6Temporary)
        Warning: When includeSiteLocal and includeLoopbackAndWildcard are false, all returned addresses should be routable, but they are not necessarily appropriate for external use. For example, Teredo and 6to4 addresses are included with IPv6 results. Additional validation is recommended. See e.g. TransportUtil.isPubliclyRoutable(). Warning, very slow on Windows, appx. 200ms + 50ms/interface
        Parameters:
        includeSiteLocal - whether to include private like 192.168.x.x and deprecated IPv6 addresses
        includeLoopbackAndWildcard - whether to include 127.x.x.x and 0.0.0.0
        includeIPv6 - whether to include IPV6
        includeIPv6Temporary - whether to include IPV6 temporary addresses
        Returns:
        a sorted set of all addresses
        Since:
        0.9.46
      • getYggdrasilAddress

        public static byte[] getYggdrasilAddress()
        Warning, very slow on Windows. Caller should cache.
        Returns:
        the IPv6 address with prefix 02xx: or 03xx:
        Since:
        0.9.49
      • toString

        public static String toString​(byte[] addr)
        Convenience method to convert an IP address to a String without throwing an exception.
        Returns:
        "null" for null, and "bad IP length x" if length is invalid
        Since:
        0.8.12
      • toString

        public static String toString​(byte[] addr,
                                      int port)
        Convenience method to convert an IP address and port to a String without throwing an exception.
        Returns:
        "ipv4:port" or "[ipv6]:port"
        Since:
        0.8.12
      • getPort

        public static int getPort​(String port)
        Convenience method to convert and validate a port String without throwing an exception. Does not trim.
        Returns:
        1-65535 or 0 if invalid
        Since:
        0.9.3
      • getIP

        public static byte[] getIP​(String host)
        Caching version of InetAddress.getByName(host).getAddress(), which is slow. Caches numeric addresses only. Will resolve but not cache DNS addresses. Unlike InetAddress.getByName(), we do NOT allow numeric IPs of the form d.d.d, d.d, or d, as these are almost certainly mistakes. InetAddress.getByName() is documented to return 127.0.0.1 for a null host; here we return null. InetAddress.getByName() also returns 127.0.0.1 for a host "", but this is undocumented; as of 0.9.49, here we return null.
        Parameters:
        host - DNS or IPv4 or IPv6 address; if null or empty returns null
        Returns:
        IP or null
        Since:
        0.9.3
      • getIPOnly

        public static byte[] getIPOnly​(String host)
        Caching version of InetAddress.getByName(host).getAddress(), which is slow. Resolves literal IP addresses only, will not cause a DNS lookup. Will return null for hostnames. Unlike InetAddress.getByName(), we do NOT allow numeric IPs of the form d.d.d, d.d, or d, as these are almost certainly mistakes. InetAddress.getByName() also returns 127.0.0.1 for a host "", but this is undocumented; as of 0.9.50, here we return null.
        Parameters:
        host - literal IPv4 or IPv6 address; if null returns null
        Returns:
        IP or null
        Since:
        0.9.32
      • getIP

        public static byte[] getIP​(String host,
                                   boolean preferIPv6)
        For literal IP addresses, this is the same as getIP(String). For hostnames, will return the preferred type (IPv4/v6) if available, else the other type if available. Will resolve but not cache DNS hostnames. InetAddress.getByName() also returns 127.0.0.1 for a host "", but this is undocumented; as of 0.9.50, here we return null.
        Parameters:
        host - DNS or IPv4 or IPv6 address; if null returns null
        Returns:
        IP or null
        Since:
        0.9.28
      • getIPs

        public static List<byte[]> getIPs​(String host)
        For literal IP addresses, this is the same as getIP(String). For hostnames, may return multiple addresses, both IPv4 and IPv6, even if those addresses are not reachable due to configuration or available interfaces. Will resolve but not cache DNS hostnames. Note that order of returned results, and whether multiple results for either IPv4 or IPv6 or both are actually returned, is platform-specific and may also depend on JVM options such as java.net.preverIPv4Stack and java.net.preferIPv6Addresses. Number of results may also change based on caching at various layers, even if the ultimate name server results did not change. InetAddress.getByName() also returns 127.0.0.1 for a host "", but this is undocumented; as of 0.9.50, here we return null.
        Parameters:
        host - DNS or IPv4 or IPv6 address; if null returns null
        Returns:
        non-empty list IPs, or null if none
        Since:
        0.9.28
      • isIPv4Address

        public static boolean isIPv4Address​(String host)
        Since:
        0.9.34
      • isIPv6Address

        public static boolean isIPv6Address​(String host)
        Since:
        0.9.34
      • isIPAddress

        public static boolean isIPAddress​(String host)
        Returns:
        true if either IPv4 or IPv6
        Since:
        0.9.34
      • isDynamic

        public static boolean isDynamic​(Inet6Address addr)
        Is this address dynamic? Should be reliable on Linux. Returns best guess on Windows, Mac, and BSD, only valid if global scope.
        Parameters:
        addr - an address of a local interface, as returned from e.g. getAddresses()
        Since:
        0.9.28
      • isDeprecated

        public static boolean isDeprecated​(Inet6Address addr)
        Is this address deprecated? Should be reliable on Linux. Returns false on Windows, Mac, and BSD.
        Parameters:
        addr - an address of a local interface, as returned from e.g. getAddresses()
        Since:
        0.9.28
      • isTemporary

        public static boolean isTemporary​(Inet6Address addr)
        Is this address temporary? Should be reliable on Linux. Returns best guess on Windows, Mac, and BSD, only valid if global scope.
        Parameters:
        addr - an address of a local interface, as returned from e.g. getAddresses()
        Since:
        0.9.28
      • clearCaches

        public static void clearCaches()
        Since:
        0.9.3
      • main

        public static void main​(String[] args)
        Print out the local addresses
      • useIPv6TempAddresses

        public static String useIPv6TempAddresses()
        Returns:
        "true", "false", or "unknown"
        Since:
        0.9.50