Java获取系统的网卡IP
程序员文章站
2022-06-02 22:02:50
...
import java.net.Inet4Address;
import java.net.InetAddress;
import java.net.NetworkInterface;
import java.util.Enumeration;
/**
*
*
*/
public class NetUtil {
public static String INTRANET_IP = getIntranetIp(); // 内网IP
public static String INTERNET_IP = getInternetIp(); // 外网IP
private NetUtil(){}
/**
* 获得内网IP
* @return 内网IP
*/
private static String getIntranetIp(){
try{
return InetAddress.getLocalHost().getHostAddress();
} catch(Exception e){
throw new RuntimeException(e);
}
}
/**
* 获得外网IP
* @return 外网IP
*/
private static String getInternetIp(){
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,就返回内网IP
return INTRANET_IP;
} catch(Exception e){
throw new RuntimeException(e);
}
}
/**
* 获得指定网卡IP
* @return IP
*/
public static String getInternetIp(String type){
try{
Enumeration<NetworkInterface> networks = NetworkInterface.getNetworkInterfaces();
while (networks.hasMoreElements()){
NetworkInterface ni = (NetworkInterface) networks.nextElement();
if (!ni.getName().equals(type)) {
continue;
} else {
Enumeration<?> e2 = ni.getInetAddresses();
while (e2.hasMoreElements()) {
InetAddress ia = (InetAddress) e2.nextElement();
if (ia instanceof Inet6Address)
continue;
return ia.getHostAddress();
}
}
}
// 如果没有外网IP,就返回内网IP
return INTRANET_IP;
} catch(Exception e){
throw new RuntimeException(e);
}
}
}