/** * Convert the given string to ip and port pair. * <p/> * This supports IP6 and IP4. * <p/> * <ul> * <li>127.0.0.1:30 ==> 127.0.0.1 and 30</li> * <li>2001:0:9d38:90d7:469:1f94:f5bf:cf5d:30 ==> 2001:0:9d38:90d7:469:1f94:f5bf:cf5d and 30</li> * <li>[2001:0:9d38:90d7:469:1f94:f5bf:cf5d]:30 ==> 2001:0:9d38:90d7:469:1f94:f5bf:cf5d and 30</li> * </ul> * * @param ipPortString textual representation of ip and port pair * @param defaultPort default port used when port is invisible. * @return ip and port pair */ public static IPPortPair convertIPAndPortPair(String ipPortString, int defaultPort) { // If it's the scoped IP6 address ipPortString = removeScopedMarkerFromIP(ipPortString); if (InetAddresses.isInetAddress(ipPortString)) { return new IPPortPair(ipPortString, defaultPort); } final int i = ipPortString.lastIndexOf(":"); String ipPart = ipPortString; int portPart = defaultPort; if (i != -1) { portPart = NumberUtils.toInt(ipPortString.substring(i + 1)); ipPart = ipPortString.substring(0, i); } return new IPPortPair(getIP(ipPart), portPart); }
public String getFormattedIP() { if (isIP6()) { return "[" + ip.getHostAddress() + "]"; } else { return ip.getHostAddress(); } }
@Test public void testIPAndPortPair() { NetworkUtils.IPPortPair ipAndPortPair = NetworkUtils.convertIPAndPortPair ("2001:0:9d38:90d7:469:1f94:f5bf:cf5d", 0); assertThat(ipAndPortPair.getIP(), is("2001:0:9d38:90d7:469:1f94:f5bf:cf5d")); assertThat(ipAndPortPair.getPort(), is(0)); ipAndPortPair = NetworkUtils.convertIPAndPortPair("[2001:0:9d38:90d7:469:1f94:f5bf:cf5d]:20", 0); assertThat(ipAndPortPair.getIP(), is("2001:0:9d38:90d7:469:1f94:f5bf:cf5d")); assertThat(ipAndPortPair.getPort(), is(20)); ipAndPortPair = NetworkUtils.convertIPAndPortPair ("2001:0:9d38:90d7:469:1f94:f5bf:cf5d", 0); assertThat(ipAndPortPair.getIP(), is("2001:0:9d38:90d7:469:1f94:f5bf:cf5d")); assertThat(ipAndPortPair.getPort(), is(0)); ipAndPortPair = NetworkUtils.convertIPAndPortPair("127.0.0.1:20", 0); assertThat(ipAndPortPair.getIP(), is("127.0.0.1")); assertThat(ipAndPortPair.getPort(), is(20)); ipAndPortPair = NetworkUtils.convertIPAndPortPair("127.0.0.1", 20); assertThat(ipAndPortPair.getIP(), is("127.0.0.1")); assertThat(ipAndPortPair.getPort(), is(20)); ipAndPortPair = NetworkUtils.convertIPAndPortPair("127.2.0.1:40:40", 20); assertThat(ipAndPortPair.getIP(), is("127.0.0.1")); assertThat(ipAndPortPair.getPort(), is(40)); }
@Override public String toString() { return getFormattedIP() + ":" + this.port; }
@Test public void testLocalHost() { IPPortPair pair = new IPPortPair(NetworkUtils.DEFAULT_LOCAL_HOST_ADDRESS, 10); assertThat(pair.isLocalHost()).isTrue(); pair = new IPPortPair("10.10.10.10", 10); assertThat(pair.isLocalHost()).isFalse(); for (InetAddress each : NetworkUtils.DEFAULT_LOCAL_ADDRESSES) { if (each instanceof Inet6Address) { final String hostAddress = each.getHostAddress(); assertThat(new IPPortPair("[" + hostAddress + "]", 10).isLocalHost()).isTrue(); } } }
@Test public void testIPPair() { IPPortPair pair = new IPPortPair("[fe80::ecc6:7ab8:d4ac:c77a%10]", 10); assertThat(pair.getIP()).isEqualTo("fe80:0:0:0:ecc6:7ab8:d4ac:c77a%10"); assertThat(pair.toString()).isEqualTo("[fe80:0:0:0:ecc6:7ab8:d4ac:c77a%10]:10"); }