From 8db785ea89ff5a4155bc0ebed393a0345b66571d Mon Sep 17 00:00:00 2001 From: Looly Date: Tue, 20 Aug 2019 17:55:21 +0800 Subject: [PATCH] fix HostInfo --- CHANGELOG.md | 1 + .../main/java/cn/hutool/system/HostInfo.java | 151 ++++++------------ 2 files changed, 47 insertions(+), 105 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a3122992b..d8c18376b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,7 @@ ### Bug修复 * 【http】 修复HttpRquest中body方法长度计算问题(issue#I10UPG@Gitee) +* 【system】 修复获取本地IP问题(pr#65@Gitee) ------------------------------------------------------------------------------------------------------------- diff --git a/hutool-system/src/main/java/cn/hutool/system/HostInfo.java b/hutool-system/src/main/java/cn/hutool/system/HostInfo.java index 0880c876e..d536251b6 100644 --- a/hutool-system/src/main/java/cn/hutool/system/HostInfo.java +++ b/hutool-system/src/main/java/cn/hutool/system/HostInfo.java @@ -1,123 +1,64 @@ package cn.hutool.system; import java.io.Serializable; -import java.net.Inet4Address; import java.net.InetAddress; -import java.net.NetworkInterface; -import java.net.UnknownHostException; -import java.util.Enumeration; + +import cn.hutool.core.net.NetUtil; /** * 代表当前主机的信息。 */ public class HostInfo implements Serializable { - private static final long serialVersionUID = 1L; + private static final long serialVersionUID = 1L; - private final String HOST_NAME; - private final String HOST_ADDRESS; - private final String HOST_NETWORK_CARD_ADDRESS; + private final String HOST_NAME; + private final String HOST_ADDRESS; - public HostInfo() { - String hostName; - String hostAddress; - String hostNetworkCardAddress; + public HostInfo() { + final InetAddress localhost = NetUtil.getLocalhost(); + HOST_NAME = localhost.getHostName(); + HOST_ADDRESS = localhost.getHostAddress(); + } - try { - InetAddress localhost = InetAddress.getLocalHost(); + /** + * 取得当前主机的名称。 + * + *

+ * 例如:"webserver1" + *

+ * + * @return 主机名 + */ + public final String getName() { + return HOST_NAME; + } - hostName = localhost.getHostName(); - hostAddress = localhost.getHostAddress(); - hostNetworkCardAddress = getInternetIp(); - } catch (UnknownHostException e) { - hostName = "localhost"; - hostAddress = "127.0.0.1"; - hostNetworkCardAddress = "127.0.0.1"; - } + /** + * 取得当前主机的地址。 + * + *

+ * 例如:"192.168.0.1" + *

+ * + * @return 主机地址 + */ + public final String getAddress() { + return HOST_ADDRESS; + } - HOST_NAME = hostName; - HOST_ADDRESS = hostAddress; - HOST_NETWORK_CARD_ADDRESS = hostNetworkCardAddress; - } + /** + * 将当前主机的信息转换成字符串。 + * + * @return 主机信息的字符串表示 + */ + @Override + public final String toString() { + StringBuilder builder = new StringBuilder(); - /** - * 取得当前主机的名称。 - * - *

- * 例如:"webserver1" - *

- * - * @return 主机名 - */ - public final String getName() { - return HOST_NAME; - } + SystemUtil.append(builder, "Host Name: ", getName()); + SystemUtil.append(builder, "Host Address: ", getAddress()); - /** - * 取得当前主机的地址。 - * - *

- * 例如:"192.168.0.1" - *

- * - * @return 主机地址 - */ - public final String getAddress() { - return HOST_ADDRESS; - } - - /** - * 取得当前主机的网卡IP地址。 - *

- * 例如:"192.168.0.1" - *

- * - * @return 网卡IP地址 - */ - public final String getNetworkCardAddress() { - return HOST_NETWORK_CARD_ADDRESS; - } - - /** - * 获得网卡IP - * - * @return 网卡IP - */ - public static String getInternetIp() { - String INTRANET_IP = null; - try { - Enumeration networks = NetworkInterface.getNetworkInterfaces(); - InetAddress ip = null; - Enumeration addrs; - while (networks.hasMoreElements()) { - addrs = networks.nextElement().getInetAddresses(); - while (addrs.hasMoreElements()) { - ip = addrs.nextElement(); - if (ip != null && ip instanceof Inet4Address && ip.isSiteLocalAddress() && !ip.getHostAddress().equals(INTRANET_IP)) { - return ip.getHostAddress(); - } - } - } - // 如果没有网卡IP,就返回/etc/hosts IP - return INTRANET_IP; - } catch (Exception e) { - throw new RuntimeException(e); - } - } - - /** - * 将当前主机的信息转换成字符串。 - * - * @return 主机信息的字符串表示 - */ - @Override - public final String toString() { - StringBuilder builder = new StringBuilder(); - - SystemUtil.append(builder, "Host Name: ", getName()); - SystemUtil.append(builder, "Host Address: ", getAddress()); - SystemUtil.append(builder, "Host NETWORK CARD ADDRESS: ", getNetworkCardAddress()); - - return builder.toString(); - } + return builder.toString(); + } }