Browse Source

fix HostInfo

Looly 6 years ago
parent
commit
8db785ea89
2 changed files with 47 additions and 105 deletions
  1. 1 0
      CHANGELOG.md
  2. 46 105
      hutool-system/src/main/java/cn/hutool/system/HostInfo.java

+ 1 - 0
CHANGELOG.md

@@ -11,6 +11,7 @@
 
 
 ### Bug修复
 ### Bug修复
 * 【http】         修复HttpRquest中body方法长度计算问题(issue#I10UPG@Gitee)
 * 【http】         修复HttpRquest中body方法长度计算问题(issue#I10UPG@Gitee)
+* 【system】     修复获取本地IP问题(pr#65@Gitee)
 
 
 -------------------------------------------------------------------------------------------------------------
 -------------------------------------------------------------------------------------------------------------
 
 

+ 46 - 105
hutool-system/src/main/java/cn/hutool/system/HostInfo.java

@@ -1,123 +1,64 @@
 package cn.hutool.system;
 package cn.hutool.system;
 
 
 import java.io.Serializable;
 import java.io.Serializable;
-import java.net.Inet4Address;
 import java.net.InetAddress;
 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 {
 public class HostInfo implements Serializable {
-    private static final long serialVersionUID = 1L;
-
-    private final String HOST_NAME;
-    private final String HOST_ADDRESS;
-    private final String HOST_NETWORK_CARD_ADDRESS;
-
-    public HostInfo() {
-        String hostName;
-        String hostAddress;
-        String hostNetworkCardAddress;
-
-        try {
-            InetAddress localhost = InetAddress.getLocalHost();
-
-            hostName = localhost.getHostName();
-            hostAddress = localhost.getHostAddress();
-            hostNetworkCardAddress = getInternetIp();
-        } catch (UnknownHostException e) {
-            hostName = "localhost";
-            hostAddress = "127.0.0.1";
-            hostNetworkCardAddress = "127.0.0.1";
-        }
-
-        HOST_NAME = hostName;
-        HOST_ADDRESS = hostAddress;
-        HOST_NETWORK_CARD_ADDRESS = hostNetworkCardAddress;
-    }
+	private static final long serialVersionUID = 1L;
 
 
-    /**
-     * 取得当前主机的名称。
-     *
-     * <p>
-     * 例如:<code>"webserver1"</code>
-     * </p>
-     *
-     * @return 主机名
-     */
-    public final String getName() {
-        return HOST_NAME;
-    }
+	private final String HOST_NAME;
+	private final String HOST_ADDRESS;
 
 
-    /**
-     * 取得当前主机的地址。
-     *
-     * <p>
-     * 例如:<code>"192.168.0.1"</code>
-     * </p>
-     *
-     * @return 主机地址
-     */
-    public final String getAddress() {
-        return HOST_ADDRESS;
-    }
+	public HostInfo() {
+		final InetAddress localhost = NetUtil.getLocalhost();
+		HOST_NAME = localhost.getHostName();
+		HOST_ADDRESS = localhost.getHostAddress();
+	}
 
 
-    /**
-     * 取得当前主机的网卡IP地址。
-     * <p>
-     * 例如:<code>"192.168.0.1"</code>
-     * </p>
-     *
-     * @return 网卡IP地址
-     */
-    public final String getNetworkCardAddress() {
-        return HOST_NETWORK_CARD_ADDRESS;
-    }
+	/**
+	 * 取得当前主机的名称。
+	 *
+	 * <p>
+	 * 例如:<code>"webserver1"</code>
+	 * </p>
+	 *
+	 * @return 主机名
+	 */
+	public final String getName() {
+		return HOST_NAME;
+	}
 
 
-    /**
-     * 获得网卡IP
-     *
-     * @return 网卡IP
-     */
-    public static String getInternetIp() {
-        String INTRANET_IP = null;
-        try {
-            Enumeration<NetworkInterface> networks = NetworkInterface.getNetworkInterfaces();
-            InetAddress ip = null;
-            Enumeration<InetAddress> 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);
-        }
-    }
+	/**
+	 * 取得当前主机的地址。
+	 *
+	 * <p>
+	 * 例如:<code>"192.168.0.1"</code>
+	 * </p>
+	 *
+	 * @return 主机地址
+	 */
+	public final String getAddress() {
+		return HOST_ADDRESS;
+	}
 
 
-    /**
-     * 将当前主机的信息转换成字符串。
-     *
-     * @return 主机信息的字符串表示
-     */
-    @Override
-    public final String toString() {
-        StringBuilder builder = new StringBuilder();
+	/**
+	 * 将当前主机的信息转换成字符串。
+	 *
+	 * @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());
+		SystemUtil.append(builder, "Host Name:    ", getName());
+		SystemUtil.append(builder, "Host Address: ", getAddress());
 
 
-        return builder.toString();
-    }
+		return builder.toString();
+	}
 
 
 }
 }