您的位置:首页 > 编程语言 > Java开发

主机上有多个网卡用java指定获取某一个网卡ip的问题

2017-08-09 12:02 2671 查看
前几天写过一个基于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地址。先把问题留在这里。以后找到解决办法再来更新
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: