fix HostInfo

This commit is contained in:
Looly 2019-08-20 17:55:21 +08:00
parent fb488a0081
commit 8db785ea89
2 changed files with 47 additions and 105 deletions

View File

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

View File

@ -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 cn.hutool.core.net.NetUtil;
import java.util.Enumeration;
/** /**
* 代表当前主机的信息 * 代表当前主机的信息
*/ */
public class HostInfo implements Serializable { 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_NAME;
private final String HOST_ADDRESS; private final String HOST_ADDRESS;
private final String HOST_NETWORK_CARD_ADDRESS;
public HostInfo() { public HostInfo() {
String hostName; final InetAddress localhost = NetUtil.getLocalhost();
String hostAddress; HOST_NAME = localhost.getHostName();
String hostNetworkCardAddress; HOST_ADDRESS = localhost.getHostAddress();
}
try { /**
InetAddress localhost = InetAddress.getLocalHost(); * 取得当前主机的名称
*
* <p>
* 例如<code>"webserver1"</code>
* </p>
*
* @return 主机名
*/
public final String getName() {
return HOST_NAME;
}
hostName = localhost.getHostName(); /**
hostAddress = localhost.getHostAddress(); * 取得当前主机的地址
hostNetworkCardAddress = getInternetIp(); *
} catch (UnknownHostException e) { * <p>
hostName = "localhost"; * 例如<code>"192.168.0.1"</code>
hostAddress = "127.0.0.1"; * </p>
hostNetworkCardAddress = "127.0.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();
/** SystemUtil.append(builder, "Host Name: ", getName());
* 取得当前主机的名称 SystemUtil.append(builder, "Host Address: ", getAddress());
*
* <p>
* 例如<code>"webserver1"</code>
* </p>
*
* @return 主机名
*/
public final String getName() {
return HOST_NAME;
}
/** return builder.toString();
* 取得当前主机的地址 }
*
* <p>
* 例如<code>"192.168.0.1"</code>
* </p>
*
* @return 主机地址
*/
public final String getAddress() {
return HOST_ADDRESS;
}
/**
* 取得当前主机的网卡IP地址
* <p>
* 例如<code>"192.168.0.1"</code>
* </p>
*
* @return 网卡IP地址
*/
public final String getNetworkCardAddress() {
return HOST_NETWORK_CARD_ADDRESS;
}
/**
* 获得网卡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);
}
}
/**
* 将当前主机的信息转换成字符串
*
* @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();
}
} }