1. 程式人生 > >java獲取本地真實ip

java獲取本地真實ip

一、問題

在獲取本地ip這個問題上遇見了問題。

1、InetAddress.getLocalHost()得到的是VMnet8的ip地址,而並非本地真實ip。

2、InetAddress.getLocalHost().getHostAddress()獲取到的是127.0.0.1

二、解決方法

接下來上正確程式碼:

StringBuilder sb = new StringBuilder();
        try {
            Enumeration<NetworkInterface> en = NetworkInterface.getNetworkInterfaces();//獲取本地所有網路介面
            while (en.hasMoreElements()) {//遍歷列舉中的每一個元素
                NetworkInterface ni= (NetworkInterface) en.nextElement();
                Enumeration<InetAddress> enumInetAddr = ni.getInetAddresses();
                while (enumInetAddr.hasMoreElements()) {
                    InetAddress inetAddress = (InetAddress) enumInetAddr.nextElement();
                    if (!inetAddress.isLoopbackAddress()  && !inetAddress.isLinkLocalAddress()
                            && inetAddress.isSiteLocalAddress()) {
                        sb.append("name:" + inetAddress.getHostName().toString()+"\n");
                        sb.append("ip:" + inetAddress.getHostAddress().toString()+"\n");
                    }
                }
            }
        } catch (SocketException e) {  }
        System.out.println(sb.toString());

從JDK1.4開始,提供NetworkInterface類。這個類可以得到本機所有的物理網路介面和虛擬機器等軟體利用本機的物理網路介面建立的邏輯網路介面的資訊。該類的具體用法,大家可自行百度,這裡就不具體介紹了。