新增获取网卡IP地址方法

This commit is contained in:
lxd 2019-08-20 16:34:02 +08:00
parent b791a75dd6
commit fef0e9a358

View File

@ -1,8 +1,11 @@
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.net.UnknownHostException;
import java.util.Enumeration;
/** /**
* 代表当前主机的信息 * 代表当前主机的信息
@ -12,23 +15,28 @@ public class HostInfo implements Serializable{
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; String hostName;
String hostAddress; String hostAddress;
String hostNetworkCardAddress;
try { try {
InetAddress localhost = InetAddress.getLocalHost(); InetAddress localhost = InetAddress.getLocalHost();
hostName = localhost.getHostName(); hostName = localhost.getHostName();
hostAddress = localhost.getHostAddress(); hostAddress = localhost.getHostAddress();
hostNetworkCardAddress = getInternetIp();
} catch (UnknownHostException e) { } catch (UnknownHostException e) {
hostName = "localhost"; hostName = "localhost";
hostAddress = "127.0.0.1"; hostAddress = "127.0.0.1";
hostNetworkCardAddress = "127.0.0.1";
} }
HOST_NAME = hostName; HOST_NAME = hostName;
HOST_ADDRESS = hostAddress; HOST_ADDRESS = hostAddress;
HOST_NETWORK_CARD_ADDRESS = hostNetworkCardAddress;
} }
/** /**
@ -57,6 +65,45 @@ public class HostInfo implements Serializable{
return HOST_ADDRESS; 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);
}
}
/** /**
* 将当前主机的信息转换成字符串 * 将当前主机的信息转换成字符串
* *
@ -68,6 +115,7 @@ public class HostInfo implements Serializable{
SystemUtil.append(builder, "Host Name: ", getName()); SystemUtil.append(builder, "Host Name: ", getName());
SystemUtil.append(builder, "Host Address: ", getAddress()); SystemUtil.append(builder, "Host Address: ", getAddress());
SystemUtil.append(builder, "Host NETWORK CARD ADDRESS: ", getNetworkCardAddress());
return builder.toString(); return builder.toString();
} }