主要涉及NetworkInterface
、Enumeration
、InetAddress
等類
/* 獲取本機網內地址 */
public static InetAddress getInet4Address(){
try {
//獲取所有網絡接口
Enumeration<NetworkInterface> allNetworkInterfaces = NetworkInterface.getNetworkInterfaces();
//遍歷所有網絡接口
for(;allNetworkInterfaces.hasMoreElements();){
NetworkInterface networkInterface=allNetworkInterfaces.nextElement();
//如果此網絡接口為 回環接口 或者 虛擬接口(子接口) 或者 未啟用 或者 描述中包含VM
if(networkInterface.isLoopback()||networkInterface.isVirtual()||!networkInterface.isUp()||networkInterface.getDisplayName().contains("VM")){
//繼續下次循環
continue;
}
//如果不是Intel與Realtek的網卡
// if(!(networkInterface.getDisplayName().contains("Intel"))&&!(networkInterface.getDisplayName().contains("Realtek"))){
// //繼續下次循環
// continue;
// }
//遍歷此接口下的所有IP(因為包括子網掩碼各種信息)
for(Enumeration<InetAddress> inetAddressEnumeration=networkInterface.getInetAddresses();inetAddressEnumeration.hasMoreElements();){
InetAddress inetAddress=inetAddressEnumeration.nextElement();
//如果此IP不為空
if(inetAddress!=null){
//如果此IP為IPV4 則返回
if(inetAddress instanceof Inet4Address){
return inetAddress;
}
/* // -------這樣判斷IPV4更快---------- if(inetAddress.getAddress().length==4){ return inetAddress; } */
}
}
}
return null;
}catch(SocketException e){
e.printStackTrace();
return null;
}
}
參考大佬:https://blog.csdn.net/yinshuomail/article/details/81624648