package com.zhangfeiyan;
import java.net.InetAddress;
import java.net.NetworkInterface;
import java.net.SocketException;
import java.net.UnknownHostException;
import java.util.Enumeration;
public class IPAquire {
private static volatile String cachedIpAddress;
public static void main(String[] args) {
String ip = getIp();
System.out.println(ip);
}
/**
* 获取本机IP地址.
* 有限获取外网IP地址. 也有可能是链接着路由器的最终IP地址.
*
* @return 本机IP地址
*/
public static String getIp() {
if (null != cachedIpAddress) {
return cachedIpAddress;
}
Enumeration<NetworkInterface> netInterfaces = null;
try {
netInterfaces = NetworkInterface.getNetworkInterfaces();
} catch (final SocketException ex) {
// throw new JobException(ex);
}
String localIpAddress = null;
while (netInterfaces.hasMoreElements()) {
NetworkInterface netInterface = netInterfaces.nextElement();
Enumeration<InetAddress> ipAddresses = netInterface.getInetAddresses();
while (ipAddresses.hasMoreElements()) {
InetAddress ipAddress = ipAddresses.nextElement();
if (isPublicIpAddress(ipAddress)) {
String publicIpAddress = ipAddress.getHostAddress();
cachedIpAddress = publicIpAddress;
return publicIpAddress;
}
if (isLocalIpAddress(ipAddress)) {
localIpAddress = ipAddress.getHostAddress();
}
}
}
cachedIpAddress = localIpAddress;
return localIpAddress;
}
/**
* 获取本机Host名称.
*
* @return 本机Host名称
*/
public String getHostName() {
return getLocalHost().getHostName();
}
private static boolean isPublicIpAddress(final InetAddress ipAddress) {
return !ipAddress.isSiteLocalAddress() && !ipAddress.isLoopbackAddress() && !isV6IpAddress(ipAddress);
}
private static boolean isLocalIpAddress(final InetAddress ipAddress) {
return ipAddress.isSiteLocalAddress() && !ipAddress.isLoopbackAddress() && !isV6IpAddress(ipAddress);
}
private static boolean isV6IpAddress(final InetAddress ipAddress) {
return ipAddress.getHostAddress().contains(":");
}
private static InetAddress getLocalHost() {
InetAddress result = null;
try {
result = InetAddress.getLocalHost();
} catch (final UnknownHostException ex) {
// throw new JobException(ex);
}
return result;
}
}
java获取本机ip地址
最新推荐文章于 2023-06-12 16:25:28 发布