Created
December 9, 2013 16:17
-
-
Save EvanYellow/7874992 to your computer and use it in GitHub Desktop.
es select itf 2
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public InetAddress resolveInetAddress(String host, String defaultValue1, String defaultValue2) throws UnknownHostException, IOException { | |
if (host == null) { | |
host = defaultValue1; | |
} | |
if (host == null) { | |
host = defaultValue2; | |
} | |
if (host == null) { | |
for (CustomNameResolver customNameResolver : customNameResolvers) { | |
InetAddress inetAddress = customNameResolver.resolveDefault(); | |
if (inetAddress != null) { | |
return inetAddress; | |
} | |
} | |
return null; | |
} | |
String origHost = host; | |
if ((host.startsWith("#") && host.endsWith("#")) || (host.startsWith("_") && host.endsWith("_"))) { | |
host = host.substring(1, host.length() - 1); | |
for (CustomNameResolver customNameResolver : customNameResolvers) { | |
InetAddress inetAddress = customNameResolver.resolveIfPossible(host); | |
if (inetAddress != null) { | |
return inetAddress; | |
} | |
} | |
if (host.equals("local")) { | |
return NetworkUtils.getLocalAddress(); | |
} else if (host.startsWith("non_loopback")) { | |
if (host.toLowerCase(Locale.ROOT).endsWith(":ipv4")) { | |
return NetworkUtils.getFirstNonLoopbackAddress(NetworkUtils.StackType.IPv4); | |
} else if (host.toLowerCase(Locale.ROOT).endsWith(":ipv6")) { | |
return NetworkUtils.getFirstNonLoopbackAddress(NetworkUtils.StackType.IPv6); | |
} else { | |
return NetworkUtils.getFirstNonLoopbackAddress(NetworkUtils.getIpStackType()); | |
} | |
} else { | |
NetworkUtils.StackType stackType = NetworkUtils.getIpStackType(); | |
if (host.toLowerCase(Locale.ROOT).endsWith(":ipv4")) { | |
stackType = NetworkUtils.StackType.IPv4; | |
host = host.substring(0, host.length() - 5); | |
} else if (host.toLowerCase(Locale.ROOT).endsWith(":ipv6")) { | |
stackType = NetworkUtils.StackType.IPv6; | |
host = host.substring(0, host.length() - 5); | |
} | |
Collection<NetworkInterface> allInterfs = NetworkUtils.getAllAvailableInterfaces(); | |
for (NetworkInterface ni : allInterfs) { | |
if (!ni.isUp()) { | |
continue; | |
} | |
if (host.equals(ni.getName()) || host.equals(ni.getDisplayName())) { | |
if (ni.isLoopback()) { | |
return NetworkUtils.getFirstAddress(ni, stackType); | |
} else { | |
return NetworkUtils.getFirstNonLoopbackAddress(ni, stackType); | |
} | |
} | |
} | |
} | |
throw new IOException("Failed to find network interface for [" + origHost + "]"); | |
} | |
return InetAddress.getByName(host); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment