如何获取本地地址
2020-04-03 本文已影响0人
一切还原
说明
写代码前,先明确一些规则:
1、127.xxx.xxx.xxx 属于"loopback" 地址,即只能你自己的本机可见,就是本机地址,比较常见的有127.0.0.1;
2、192.168.xxx.xxx 属于private 私有地址(site local address),属于本地组织内部访问,只能在本地局域网可见。同样10.xxx.xxx.xxx、从172.16.xxx.xxx 到 172.31.xxx.xxx都是私有地址,也是属于组织内部访问;
3、169.254.xxx.xxx 属于连接本地地址(link local IP),在单独网段可用
4、从224.xxx.xxx.xxx 到 239.xxx.xxx.xxx 属于组播地址
5、比较特殊的255.255.255.255 属于广播地址
6、除此之外的地址就是点对点的可用的公开IPv4地址
public static String ipAddress() {
try {
//获取网卡信息
Enumeration<NetworkInterface> interfaceEnumeration = NetworkInterface.getNetworkInterfaces();
String localAddress = null, netAddress = null;
while (interfaceEnumeration.hasMoreElements()) {
NetworkInterface networkInterface = interfaceEnumeration.nextElement();
//获取网卡ip信息
Enumeration<InetAddress> addressEnumeration = networkInterface.getInetAddresses();
while (addressEnumeration.hasMoreElements()) {
InetAddress address = addressEnumeration.nextElement();
if (!address.isLoopbackAddress()
&& address.getHostAddress().indexOf(':') == -1) {
if (!address.isSiteLocalAddress()) {
netAddress = address.getHostAddress();
} else {
localAddress = address.getHostAddress();
}
if (netAddress != null) {
break;
}
}
}
if (netAddress != null) {
break;
}
}
return StringUtils.isBlank(netAddress) ? localAddress : netAddress;
} catch (SocketException e) {
e.printStackTrace();
}
return null;
}