Package io.netty.util

Class NetUtil


  • public final class NetUtil
    extends java.lang.Object
    A class that holds a number of network-related constants.

    This class borrowed some of its methods from a modified fork of the Inet6Util class which was part of Apache Harmony.

    • Nested Class Summary

      Nested Classes 
      Modifier and Type Class Description
      private static class  NetUtil.SoMaxConnAction  
    • Field Summary

      Fields 
      Modifier and Type Field Description
      private static int IPV4_MAX_CHAR_BETWEEN_SEPARATOR
      Maximum amount of value adding characters in between IPV4 separators
      private static boolean IPV4_PREFERRED
      true if IPv4 should be used even if the system supports both IPv4 and IPv6.
      private static int IPV4_SEPARATORS
      Number of separators that must be present in an IPv4 string
      private static boolean IPV6_ADDRESSES_PREFERRED
      true if an IPv6 address should be preferred when a host has both an IPv4 address and an IPv6 address.
      private static int IPV6_BYTE_COUNT
      Number of bytes needed to represent an IPV6 value
      private static int IPV6_MAX_CHAR_BETWEEN_SEPARATOR
      Maximum amount of value adding characters in between IPV6 separators
      private static int IPV6_MAX_CHAR_COUNT
      The maximum number of characters for an IPV6 string with no scope
      private static int IPV6_MAX_SEPARATORS
      Maximum number of separators that must be present in an IPv6 string
      private static int IPV6_MIN_SEPARATORS
      Minimum number of separators that must be present in an IPv6 string
      private static int IPV6_WORD_COUNT
      This defines how many words (represented as ints) are needed to represent an IPv6 address
      static java.net.InetAddress LOCALHOST
      The InetAddress that represents the loopback address.
      static java.net.Inet4Address LOCALHOST4
      The Inet4Address that represents the IPv4 loopback address '127.0.0.1'
      static java.net.Inet6Address LOCALHOST6
      The Inet6Address that represents the IPv6 loopback address '::1'
      private static InternalLogger logger
      The logger being used by this class
      static java.net.NetworkInterface LOOPBACK_IF
      The loopback NetworkInterface of the current machine
      static java.util.Collection<java.net.NetworkInterface> NETWORK_INTERFACES
      An unmodifiable Collection of all the interfaces on this machine.
      static int SOMAXCONN
      The SOMAXCONN value of the current machine.
    • Constructor Summary

      Constructors 
      Modifier Constructor Description
      private NetUtil()
      A constructor to stop this class being constructed.
    • Method Summary

      All Methods Static Methods Concrete Methods 
      Modifier and Type Method Description
      static java.lang.String bytesToIpAddress​(byte[] bytes)
      Converts 4-byte or 16-byte data into an IPv4 or IPv6 string respectively.
      static java.lang.String bytesToIpAddress​(byte[] bytes, int offset, int length)
      Converts 4-byte or 16-byte data into an IPv4 or IPv6 string respectively.
      static byte[] createByteArrayFromIpAddressString​(java.lang.String ipAddressString)
      Creates an byte[] based on an ipAddressString.
      static java.net.InetAddress createInetAddressFromIpAddressString​(java.lang.String ipAddressString)
      Creates an InetAddress based on an ipAddressString or might return null if it can't be parsed.
      private static int decimalDigit​(java.lang.String str, int pos)  
      static java.net.Inet6Address getByName​(java.lang.CharSequence ip)
      Returns the Inet6Address representation of a CharSequence IP address.
      static java.net.Inet6Address getByName​(java.lang.CharSequence ip, boolean ipv4Mapped)
      Returns the Inet6Address representation of a CharSequence IP address.
      static java.lang.String getHostname​(java.net.InetSocketAddress addr)
      Returns InetSocketAddress.getHostString() if Java >= 7, or InetSocketAddress.getHostName() otherwise.
      (package private) static byte[] getIPv6ByName​(java.lang.CharSequence ip, boolean ipv4Mapped)
      Returns the byte array representation of a CharSequence IP address.
      private static boolean inRangeEndExclusive​(int value, int start, int end)
      Does a range check on value if is within start (inclusive) and end (exclusive).
      static java.lang.String intToIpAddress​(int i)
      Converts a 32-bit integer into an IPv4 address.
      static int ipv4AddressToInt​(java.net.Inet4Address ipAddress)
      Convert Inet4Address into int
      private static byte ipv4WordToByte​(java.lang.String ip, int from, int toExclusive)  
      static boolean isIpV4StackPreferred()
      Returns true if IPv4 should be used even if the system supports both IPv4 and IPv6.
      static boolean isIpV6AddressesPreferred()
      Returns true if an IPv6 address should be preferred when a host has both an IPv4 address and an IPv6 address.
      private static boolean isValidHexChar​(char c)  
      private static boolean isValidIpV4Address​(AsciiString ip, int from, int toExcluded)  
      static boolean isValidIpV4Address​(java.lang.CharSequence ip)
      Takes a CharSequence and parses it to see if it is a valid IPV4 address.
      private static boolean isValidIpV4Address​(java.lang.CharSequence ip, int from, int toExcluded)  
      static boolean isValidIpV4Address​(java.lang.String ip)
      Takes a String and parses it to see if it is a valid IPV4 address.
      private static boolean isValidIpV4Address​(java.lang.String ip, int from, int toExcluded)  
      private static boolean isValidIpV4Address0​(java.lang.CharSequence ip, int from, int toExcluded)  
      private static boolean isValidIPv4Mapped​(byte[] bytes, int currentIndex, int compressBegin, int compressLength)  
      private static boolean isValidIPv4MappedChar​(char c)  
      private static boolean isValidIPv4MappedSeparators​(byte b0, byte b1, boolean mustBeZero)  
      private static boolean isValidIpV4Word​(java.lang.CharSequence word, int from, int toExclusive)  
      static boolean isValidIpV6Address​(java.lang.CharSequence ip)  
      static boolean isValidIpV6Address​(java.lang.String ip)  
      private static boolean isValidNumericChar​(char c)  
      private static java.lang.StringBuilder newSocketAddressStringBuilder​(java.lang.String host, java.lang.String port, boolean ipv4)  
      private static java.lang.Integer sysctlGetInt​(java.lang.String sysctlKey)
      This will execute sysctl with the sysctlKey which is expected to return the numeric value for for sysctlKey.
      private static java.lang.String toAddressString​(byte[] bytes, int offset, boolean ipv4Mapped)  
      static java.lang.String toAddressString​(java.net.InetAddress ip)
      Returns the String representation of an InetAddress.
      static java.lang.String toAddressString​(java.net.InetAddress ip, boolean ipv4Mapped)
      Returns the String representation of an InetAddress.
      static java.lang.String toSocketAddressString​(java.lang.String host, int port)
      Returns the String representation of a host port combo.
      static java.lang.String toSocketAddressString​(java.net.InetSocketAddress addr)
      Returns the String representation of an InetSocketAddress.
      (package private) static byte[] validIpV4ToBytes​(java.lang.String ip)  
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Field Detail

      • LOCALHOST4

        public static final java.net.Inet4Address LOCALHOST4
        The Inet4Address that represents the IPv4 loopback address '127.0.0.1'
      • LOCALHOST6

        public static final java.net.Inet6Address LOCALHOST6
        The Inet6Address that represents the IPv6 loopback address '::1'
      • LOCALHOST

        public static final java.net.InetAddress LOCALHOST
        The InetAddress that represents the loopback address. If IPv6 stack is available, it will refer to LOCALHOST6. Otherwise, LOCALHOST4.
      • LOOPBACK_IF

        public static final java.net.NetworkInterface LOOPBACK_IF
        The loopback NetworkInterface of the current machine
      • NETWORK_INTERFACES

        public static final java.util.Collection<java.net.NetworkInterface> NETWORK_INTERFACES
        An unmodifiable Collection of all the interfaces on this machine.
      • SOMAXCONN

        public static final int SOMAXCONN
        The SOMAXCONN value of the current machine. If failed to get the value, 200 is used as a default value for Windows and 128 for others.
      • IPV6_WORD_COUNT

        private static final int IPV6_WORD_COUNT
        This defines how many words (represented as ints) are needed to represent an IPv6 address
        See Also:
        Constant Field Values
      • IPV6_MAX_CHAR_COUNT

        private static final int IPV6_MAX_CHAR_COUNT
        The maximum number of characters for an IPV6 string with no scope
        See Also:
        Constant Field Values
      • IPV6_BYTE_COUNT

        private static final int IPV6_BYTE_COUNT
        Number of bytes needed to represent an IPV6 value
        See Also:
        Constant Field Values
      • IPV6_MAX_CHAR_BETWEEN_SEPARATOR

        private static final int IPV6_MAX_CHAR_BETWEEN_SEPARATOR
        Maximum amount of value adding characters in between IPV6 separators
        See Also:
        Constant Field Values
      • IPV6_MIN_SEPARATORS

        private static final int IPV6_MIN_SEPARATORS
        Minimum number of separators that must be present in an IPv6 string
        See Also:
        Constant Field Values
      • IPV6_MAX_SEPARATORS

        private static final int IPV6_MAX_SEPARATORS
        Maximum number of separators that must be present in an IPv6 string
        See Also:
        Constant Field Values
      • IPV4_MAX_CHAR_BETWEEN_SEPARATOR

        private static final int IPV4_MAX_CHAR_BETWEEN_SEPARATOR
        Maximum amount of value adding characters in between IPV4 separators
        See Also:
        Constant Field Values
      • IPV4_SEPARATORS

        private static final int IPV4_SEPARATORS
        Number of separators that must be present in an IPv4 string
        See Also:
        Constant Field Values
      • IPV4_PREFERRED

        private static final boolean IPV4_PREFERRED
        true if IPv4 should be used even if the system supports both IPv4 and IPv6.
      • IPV6_ADDRESSES_PREFERRED

        private static final boolean IPV6_ADDRESSES_PREFERRED
        true if an IPv6 address should be preferred when a host has both an IPv4 address and an IPv6 address.
      • logger

        private static final InternalLogger logger
        The logger being used by this class
    • Constructor Detail

      • NetUtil

        private NetUtil()
        A constructor to stop this class being constructed.
    • Method Detail

      • sysctlGetInt

        private static java.lang.Integer sysctlGetInt​(java.lang.String sysctlKey)
                                               throws java.io.IOException
        This will execute sysctl with the sysctlKey which is expected to return the numeric value for for sysctlKey.
        Parameters:
        sysctlKey - The key which the return value corresponds to.
        Returns:
        The sysctl value for sysctlKey.
        Throws:
        java.io.IOException
      • isIpV4StackPreferred

        public static boolean isIpV4StackPreferred()
        Returns true if IPv4 should be used even if the system supports both IPv4 and IPv6. Setting this property to true will disable IPv6 support. The default value of this property is false.
        See Also:
        Java SE networking properties
      • isIpV6AddressesPreferred

        public static boolean isIpV6AddressesPreferred()
        Returns true if an IPv6 address should be preferred when a host has both an IPv4 address and an IPv6 address. The default value of this property is false.
        See Also:
        Java SE networking properties
      • createByteArrayFromIpAddressString

        public static byte[] createByteArrayFromIpAddressString​(java.lang.String ipAddressString)
        Creates an byte[] based on an ipAddressString. No error handling is performed here.
      • createInetAddressFromIpAddressString

        public static java.net.InetAddress createInetAddressFromIpAddressString​(java.lang.String ipAddressString)
        Creates an InetAddress based on an ipAddressString or might return null if it can't be parsed. No error handling is performed here.
      • decimalDigit

        private static int decimalDigit​(java.lang.String str,
                                        int pos)
      • ipv4WordToByte

        private static byte ipv4WordToByte​(java.lang.String ip,
                                           int from,
                                           int toExclusive)
      • validIpV4ToBytes

        static byte[] validIpV4ToBytes​(java.lang.String ip)
      • ipv4AddressToInt

        public static int ipv4AddressToInt​(java.net.Inet4Address ipAddress)
        Convert Inet4Address into int
      • intToIpAddress

        public static java.lang.String intToIpAddress​(int i)
        Converts a 32-bit integer into an IPv4 address.
      • bytesToIpAddress

        public static java.lang.String bytesToIpAddress​(byte[] bytes)
        Converts 4-byte or 16-byte data into an IPv4 or IPv6 string respectively.
        Throws:
        java.lang.IllegalArgumentException - if length is not 4 nor 16
      • bytesToIpAddress

        public static java.lang.String bytesToIpAddress​(byte[] bytes,
                                                        int offset,
                                                        int length)
        Converts 4-byte or 16-byte data into an IPv4 or IPv6 string respectively.
        Throws:
        java.lang.IllegalArgumentException - if length is not 4 nor 16
      • isValidIpV6Address

        public static boolean isValidIpV6Address​(java.lang.String ip)
      • isValidIpV6Address

        public static boolean isValidIpV6Address​(java.lang.CharSequence ip)
      • isValidIpV4Word

        private static boolean isValidIpV4Word​(java.lang.CharSequence word,
                                               int from,
                                               int toExclusive)
      • isValidHexChar

        private static boolean isValidHexChar​(char c)
      • isValidNumericChar

        private static boolean isValidNumericChar​(char c)
      • isValidIPv4MappedChar

        private static boolean isValidIPv4MappedChar​(char c)
      • isValidIPv4MappedSeparators

        private static boolean isValidIPv4MappedSeparators​(byte b0,
                                                           byte b1,
                                                           boolean mustBeZero)
      • isValidIPv4Mapped

        private static boolean isValidIPv4Mapped​(byte[] bytes,
                                                 int currentIndex,
                                                 int compressBegin,
                                                 int compressLength)
      • isValidIpV4Address

        public static boolean isValidIpV4Address​(java.lang.CharSequence ip)
        Takes a CharSequence and parses it to see if it is a valid IPV4 address.
        Returns:
        true, if the string represents an IPV4 address in dotted notation, false otherwise
      • isValidIpV4Address

        public static boolean isValidIpV4Address​(java.lang.String ip)
        Takes a String and parses it to see if it is a valid IPV4 address.
        Returns:
        true, if the string represents an IPV4 address in dotted notation, false otherwise
      • isValidIpV4Address

        private static boolean isValidIpV4Address​(java.lang.CharSequence ip,
                                                  int from,
                                                  int toExcluded)
      • isValidIpV4Address

        private static boolean isValidIpV4Address​(java.lang.String ip,
                                                  int from,
                                                  int toExcluded)
      • isValidIpV4Address

        private static boolean isValidIpV4Address​(AsciiString ip,
                                                  int from,
                                                  int toExcluded)
      • isValidIpV4Address0

        private static boolean isValidIpV4Address0​(java.lang.CharSequence ip,
                                                   int from,
                                                   int toExcluded)
      • getByName

        public static java.net.Inet6Address getByName​(java.lang.CharSequence ip)
        Returns the Inet6Address representation of a CharSequence IP address.

        This method will treat all IPv4 type addresses as "IPv4 mapped" (see getByName(CharSequence, boolean))

        Parameters:
        ip - CharSequence IP address to be converted to a Inet6Address
        Returns:
        Inet6Address representation of the ip or null if not a valid IP address.
      • getByName

        public static java.net.Inet6Address getByName​(java.lang.CharSequence ip,
                                                      boolean ipv4Mapped)
        Returns the Inet6Address representation of a CharSequence IP address.

        The ipv4Mapped parameter specifies how IPv4 addresses should be treated. "IPv4 mapped" format as defined in rfc 4291 section 2 is supported.

        Parameters:
        ip - CharSequence IP address to be converted to a Inet6Address
        ipv4Mapped -
        • true To allow IPv4 mapped inputs to be translated into Inet6Address
        • false Consider IPv4 mapped addresses as invalid.
        Returns:
        Inet6Address representation of the ip or null if not a valid IP address.
      • getIPv6ByName

        static byte[] getIPv6ByName​(java.lang.CharSequence ip,
                                    boolean ipv4Mapped)
        Returns the byte array representation of a CharSequence IP address.

        The ipv4Mapped parameter specifies how IPv4 addresses should be treated. "IPv4 mapped" format as defined in rfc 4291 section 2 is supported.

        Parameters:
        ip - CharSequence IP address to be converted to a Inet6Address
        ipv4Mapped -
        • true To allow IPv4 mapped inputs to be translated into Inet6Address
        • false Consider IPv4 mapped addresses as invalid.
        Returns:
        byte array representation of the ip or null if not a valid IP address.
      • toSocketAddressString

        public static java.lang.String toSocketAddressString​(java.net.InetSocketAddress addr)
        Returns the String representation of an InetSocketAddress.

        The output does not include Scope ID.

        Parameters:
        addr - InetSocketAddress to be converted to an address string
        Returns:
        String containing the text-formatted IP address
      • toSocketAddressString

        public static java.lang.String toSocketAddressString​(java.lang.String host,
                                                             int port)
        Returns the String representation of a host port combo.
      • newSocketAddressStringBuilder

        private static java.lang.StringBuilder newSocketAddressStringBuilder​(java.lang.String host,
                                                                             java.lang.String port,
                                                                             boolean ipv4)
      • toAddressString

        public static java.lang.String toAddressString​(java.net.InetAddress ip)
        Returns the String representation of an InetAddress.
        • Inet4Address results are identical to InetAddress.getHostAddress()
        • Inet6Address results adhere to rfc 5952 section 4

        The output does not include Scope ID.

        Parameters:
        ip - InetAddress to be converted to an address string
        Returns:
        String containing the text-formatted IP address
      • toAddressString

        public static java.lang.String toAddressString​(java.net.InetAddress ip,
                                                       boolean ipv4Mapped)
        Returns the String representation of an InetAddress.
        • Inet4Address results are identical to InetAddress.getHostAddress()
        • Inet6Address results adhere to rfc 5952 section 4 if ipv4Mapped is false. If ipv4Mapped is true then "IPv4 mapped" format from rfc 4291 section 2 will be supported. The compressed result will always obey the compression rules defined in rfc 5952 section 4

        The output does not include Scope ID.

        Parameters:
        ip - InetAddress to be converted to an address string
        ipv4Mapped -
        • true to stray from strict rfc 5952 and support the "IPv4 mapped" format defined in rfc 4291 section 2 while still following the updated guidelines in rfc 5952 section 4
        • false to strictly follow rfc 5952
        Returns:
        String containing the text-formatted IP address
      • toAddressString

        private static java.lang.String toAddressString​(byte[] bytes,
                                                        int offset,
                                                        boolean ipv4Mapped)
      • getHostname

        public static java.lang.String getHostname​(java.net.InetSocketAddress addr)
        Returns InetSocketAddress.getHostString() if Java >= 7, or InetSocketAddress.getHostName() otherwise.
        Parameters:
        addr - The address
        Returns:
        the host string
      • inRangeEndExclusive

        private static boolean inRangeEndExclusive​(int value,
                                                   int start,
                                                   int end)
        Does a range check on value if is within start (inclusive) and end (exclusive).
        Parameters:
        value - The value to checked if is within start (inclusive) and end (exclusive)
        start - The start of the range (inclusive)
        end - The end of the range (exclusive)
        Returns:
        • true if value if is within start (inclusive) and end (exclusive)
        • false otherwise