用以下代码
hostaddress = InetAddress.getLocalHost().getHostAddress()
在大部分情况下可以正确获取到本机的IP地址。但是在不能联网的情况下,或者手动修改过hosts文件的情况下,你可能获取到的是
127.0.0.1
那么如何能够准确的获取到本机的IP呢?
我们看看Solr是如何做的:
// normalize host removing any url scheme. // input can be null, host, or url_prefix://host private String normalizeHostName(String host) throws IOException { if (host == null || host.length() == 0) { String hostaddress; try { hostaddress = InetAddress.getLocalHost().getHostAddress(); } catch (UnknownHostException e) { hostaddress = "127.0.0.1"; // cannot resolve system hostname, fall through } // Re-get the IP again for "127.0.0.1", the other case we trust the hosts // file is right. if ("127.0.0.1".equals(hostaddress)) { EnumerationnetInterfaces = null; try { netInterfaces = NetworkInterface.getNetworkInterfaces(); while (netInterfaces.hasMoreElements()) { NetworkInterface ni = netInterfaces.nextElement(); Enumeration ips = ni.getInetAddresses(); while (ips.hasMoreElements()) { InetAddress ip = ips.nextElement(); if (ip.isSiteLocalAddress()) { hostaddress = ip.getHostAddress(); } } } } catch (Exception e) { SolrException.log(log, "Error while looking for a better host name than 127.0.0.1", e); } } host = hostaddress; } else { if (URLUtil.hasScheme(host)) { host = URLUtil.removeScheme(host); } } return host; }