获取本机所有网络IP地址(Java)
背景
最近一直从事实验室的网络管理工具的开发,网管基于SNMP协议,UI框架使用JavaFX 2.0,有时间我会将开发过程中遇到的种种问题一一记录下来,避免再次采坑。 今天给大家介绍一种遍历本机所有网络IPv4地址的方法,
Java
语言实现,供大家参考。
import java.net.Inet4Address;
import java.net.InetAddress;
import java.net.NetworkInterface;
import java.net.SocketException;
import java.util.Enumeration;
/**
* Created by DaFei-PC on 2018-01-30.
*/
public class GetHostIPAddr {
public static void main(String[] args) throws SocketException {
Enumeration<NetworkInterface> interfaces = null;
interfaces = NetworkInterface.getNetworkInterfaces();
while (interfaces.hasMoreElements())
{
NetworkInterface ni = interfaces.nextElement();
if (!ni.isVirtual() && !ni.isLoopback() && ni.isUp())
{
Enumeration<InetAddress> addresss = ni.getInetAddresses();
while (addresss.hasMoreElements())
{
InetAddress nextElement = addresss.nextElement();
if (nextElement != null && nextElement instanceof Inet4Address &&
!nextElement.isLoopbackAddress() && !nextElement.isLinkLocalAddress() &&
!nextElement.isMulticastAddress())
{
String hostAddress = nextElement.getHostAddress();
//判断是否是特殊ip
if (!hostAddress.startsWith("127.") && !hostAddress.startsWith("169.254.") && !hostAddress.equals("255.255.255.255"))
{
System.out.println(ni.getName() + ", hostName: " + nextElement.getHostName() + ", 本机IP地址为:" + hostAddress + ", 网卡信息:" + ni.getDisplayName());
}
}
}
}
}
}
}
输出样例如下:
eth0, hostName: DaFei-PC, 本机IP地址为:166.111.***.***, 网卡信息:Intel(R) Ethernet Connection (2) I218-V eth4, hostName: DaFei-PC, 本机IP地址为:192.168.32.1, 网卡信息:VMware Virtual Ethernet Adapter for VMnet1 eth7, hostName: DaFei-PC, 本机IP地址为:10.8.0.150, 网卡信息:TAP-Windows Adapter V9