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();
+ }
}