1. 程式人生 > >主機上有多個網絡卡用java指定獲取某一個網絡卡ip的問題

主機上有多個網絡卡用java指定獲取某一個網絡卡ip的問題

前幾天寫過一個基於tomcat發郵件修改密碼的功能,大致是這樣:
點選修改密碼按鈕就傳送一封郵件去指定賬戶的郵箱,郵箱裡有個超連結和驗證碼,超連結開啟進入修改密碼頁面。之前能用,但是今天我的筆記本打開了獵豹免費wifi,造成有兩個網絡卡都被啟用,如下圖:
這裡寫圖片描述

發給郵箱的超連結的ip地址是通過InetAddress.getLocalHost().getHostAddress()獲取,此時得到的是專用網路的ip地址,而我的tomcat是在公用網路上執行的,兩個ip不一致,此超連結無法跳轉到修改密碼頁面。然後我直接寫了一次測試類發現,在我筆記本上用這個方法獲取的ip地址為免費wifi啟用的專有網路地址,把免費wifi關掉之後就能取到公用網路即(乙太網)的ip地址。

import java.net.InetAddress;
import java.net.NetworkInterface;
import java.net.UnknownHostException;
import java.util.Enumeration;

public class test {

    public static void main(String[] args) throws UnknownHostException {

            System.out.println("本機IP地址為:" +InetAddress.getLocalHost().getHostAddress());



    }
}

研究了一上午,寫了一個方法可獲取到本機的所有的IP。

public static InetAddress getLocalHostIp() throws SocketException{
    Enumeration allNetInterfaces=NetworkInterface.getNetworkInterfaces();
    InetAddress ip=null;
    while(allNetInterfaces.hasMoreElements()){
        NetworkInterface netInterface=(NetworkInterface) allNetInterfaces.nextElement();
        //System.out.println(netInterface.getName());
Enumeration addresses=netInterface.getInetAddresses(); while(addresses.hasMoreElements()){ ip=(InetAddress) addresses.nextElement(); if(ip!=null && ip instanceof Inet4Address){ System.out.println("本機的ip="+ip.getHostAddress()); break; } } } return ip; }

但還是沒有辦法指定獲取哪個ip地址。先把問題留在這裡。以後找到解決辦法再來更新