获取本机所有网络IP地址(Java)

2018年01月30日,网络管理工具中使用的方法

Posted by dafei on January 30, 2018

获取本机所有网络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