Class SshdSocketAddress

  • All Implemented Interfaces:
    java.io.Serializable

    public class SshdSocketAddress
    extends java.net.SocketAddress

    A simple socket address holding the host name and port number. The reason it does not extend InetSocketAddress is twofold:

    1. The InetSocketAddress performs a DNS resolution on the provided host name - which we don't want do use until we want to create a connection using this address (thus the toInetSocketAddress() call which executes this query

    2. If empty host name is provided we replace it with the any address of 0.0.0.0

    See Also:
    Serialized Form
    • Field Detail

      • WELL_KNOWN_IPV4_ADDRESSES

        public static final java.util.Set<java.lang.String> WELL_KNOWN_IPV4_ADDRESSES
      • PRIVATE_CLASS_A_PREFIX

        public static final java.lang.String PRIVATE_CLASS_A_PREFIX
        See Also:
        Constant Field Values
      • PRIVATE_CLASS_B_PREFIX

        public static final java.lang.String PRIVATE_CLASS_B_PREFIX
        See Also:
        Constant Field Values
      • PRIVATE_CLASS_C_PREFIX

        public static final java.lang.String PRIVATE_CLASS_C_PREFIX
        See Also:
        Constant Field Values
      • CARRIER_GRADE_NAT_PREFIX

        public static final java.lang.String CARRIER_GRADE_NAT_PREFIX
        See Also:
        Constant Field Values
      • BROADCAST_ADDRESS

        public static final java.lang.String BROADCAST_ADDRESS
        See Also:
        Constant Field Values
      • IPV6_MAX_HEX_GROUPS

        public static final int IPV6_MAX_HEX_GROUPS
        Max. number of hex groups (separated by ":") in an IPV6 address
        See Also:
        Constant Field Values
      • IPV6_MAX_HEX_DIGITS_PER_GROUP

        public static final int IPV6_MAX_HEX_DIGITS_PER_GROUP
        Max. hex digits in each IPv6 group
        See Also:
        Constant Field Values
      • IPV6_LONG_ANY_ADDRESS

        public static final java.lang.String IPV6_LONG_ANY_ADDRESS
        See Also:
        Constant Field Values
      • IPV6_SHORT_ANY_ADDRESS

        public static final java.lang.String IPV6_SHORT_ANY_ADDRESS
        See Also:
        Constant Field Values
      • IPV6_LONG_LOCALHOST

        public static final java.lang.String IPV6_LONG_LOCALHOST
        See Also:
        Constant Field Values
      • IPV6_SHORT_LOCALHOST

        public static final java.lang.String IPV6_SHORT_LOCALHOST
        See Also:
        Constant Field Values
      • WELL_KNOWN_IPV6_ADDRESSES

        public static final java.util.Set<java.lang.String> WELL_KNOWN_IPV6_ADDRESSES
      • LOCALHOST_ADDRESS

        public static final SshdSocketAddress LOCALHOST_ADDRESS
        A dummy placeholder that can be used instead of nulls
      • BY_HOST_ADDRESS

        public static final java.util.Comparator<java.net.InetAddress> BY_HOST_ADDRESS
        Compares InetAddress-es according to their InetAddress.getHostAddress() value case insensitive
        See Also:
        toAddressString(InetAddress)
      • BY_HOST_AND_PORT

        public static final java.util.Comparator<java.net.SocketAddress> BY_HOST_AND_PORT
        Compares SocketAddress-es according to their host case insensitive and if equals, then according to their port value (if any)
        See Also:
        toAddressString(SocketAddress), toAddressPort(SocketAddress)
      • hostName

        private final java.lang.String hostName
      • port

        private final int port
    • Constructor Detail

      • SshdSocketAddress

        public SshdSocketAddress​(int port)
      • SshdSocketAddress

        public SshdSocketAddress​(java.net.InetSocketAddress addr)
      • SshdSocketAddress

        public SshdSocketAddress​(java.lang.String hostName,
                                 int port)
    • Method Detail

      • getHostName

        public java.lang.String getHostName()
      • getPort

        public int getPort()
      • toInetSocketAddress

        public java.net.InetSocketAddress toInetSocketAddress()
      • toString

        public java.lang.String toString()
        Overrides:
        toString in class java.lang.Object
      • equals

        public boolean equals​(java.lang.Object o)
        Overrides:
        equals in class java.lang.Object
      • hashCode

        public int hashCode()
        Overrides:
        hashCode in class java.lang.Object
      • getFirstExternalNetwork4Address

        public static java.net.InetAddress getFirstExternalNetwork4Address()
        Returns the first external network address assigned to this machine or null if one is not found.
        Returns:
        Inet4Address associated with an external interface DevNote: We actually return InetAddress here, as Inet4Addresses are final and cannot be mocked.
      • getExternalNetwork4Addresses

        public static java.util.List<java.net.InetAddress> getExternalNetwork4Addresses()
        Returns:
        a List of local network addresses which are not multicast or localhost sorted according to BY_HOST_ADDRESS
      • isValidHostAddress

        public static boolean isValidHostAddress​(java.net.InetAddress addr)
        Parameters:
        addr - The InetAddress to be verified
        Returns:

        true if the address is:


        • Not null
        • An Inet4Address
        • Not link local
        • Not a multicast
        • Not a loopback
        See Also:
        InetAddress.isLinkLocalAddress(), InetAddress.isMulticastAddress(), InetAddress.isMulticastAddress()
      • isLoopback

        public static boolean isLoopback​(java.net.InetAddress addr)
        Parameters:
        addr - The InetAddress to be considered
        Returns:
        true if the address is a loopback one. Note: if InetAddress.isLoopbackAddress() returns false the address string is checked
        See Also:
        toAddressString(InetAddress), isLoopback(String)
      • isLoopback

        public static boolean isLoopback​(java.lang.String ip)
        Parameters:
        ip - IP value to be tested
        Returns:
        true if the IP is "localhost" or "127.x.x.x".
      • isIPv4LoopbackAddress

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

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

        public static boolean isEquivalentHostName​(java.lang.String h1,
                                                   java.lang.String h2,
                                                   boolean allowWildcard)
      • isLoopbackAlias

        public static boolean isLoopbackAlias​(java.lang.String h1,
                                              java.lang.String h2)
      • isWildcardAddress

        public static boolean isWildcardAddress​(java.lang.String addr)
      • toSshdSocketAddress

        public static SshdSocketAddress toSshdSocketAddress​(java.net.SocketAddress addr)
      • toAddressString

        public static java.lang.String toAddressString​(java.net.SocketAddress addr)
      • toAddressPort

        public static int toAddressPort​(java.net.SocketAddress addr)
        Attempts to resolve the port value
        Parameters:
        addr - The SocketAddress to examine
        Returns:
        The associated port value - negative if failed to resolve
      • toInetSocketAddress

        public static java.net.InetSocketAddress toInetSocketAddress​(java.net.SocketAddress remoteAddress)

        Converts a SocketAddress into an InetSocketAddress if possible:


        • If already an InetSocketAddress then cast it as such
        • If an SshdSocketAddress then invoke toInetSocketAddress()
        • Otherwise, throw an exception
        Parameters:
        remoteAddress - The SocketAddress - ignored if null
        Returns:
        The InetSocketAddress instance
        Throws:
        java.lang.ClassCastException - if argument is not already an InetSocketAddress or a SshdSocketAddress
      • toAddressString

        public static java.lang.String toAddressString​(java.net.InetAddress addr)
      • isIPv4Address

        public static boolean isIPv4Address​(java.lang.String addr)
      • isCarrierGradeNatIPv4Address

        public static boolean isCarrierGradeNatIPv4Address​(java.lang.String addr)
        Parameters:
        addr - The address to be checked
        Returns:
        true if the address is in the 100.64.0.0/10 range
        See Also:
        RFC6598
      • isValidIPv4AddressComponent

        public static boolean isValidIPv4AddressComponent​(java.lang.CharSequence c)

        Checks if the provided argument is a valid IPv4 address component:


        • Not null/empty
        • Has at most 3 digits
        • Its value is ≤ 255
        Parameters:
        c - The CharSequence to be validate
        Returns:
        true if valid IPv4 address component
      • isIPv6Address

        public static boolean isIPv6Address​(java.lang.String address)
      • removeByOptionalWildcardAddress

        public static <V> V removeByOptionalWildcardAddress​(java.util.Map<SshdSocketAddress,​? extends V> map,
                                                            SshdSocketAddress address)