关于JAVA取本机ip的一些传说

先看一段代码:the IP address of the local host. 在大多数机器上都可以取到本机ip

 

Java代码   收藏代码
  1. InetAddress.getLocalHost().getHostAddress()  

 

但是多网卡配置的时候,就悲剧了:下图这个机器使用上面的命令取回的是127.0.0.1。

 

用ifconfig看网卡:


关于JAVA取本机ip的一些传说_第1张图片

 

这个时候就需要枚举多网卡判断了

Java代码   收藏代码
  1. Enumeration<NetworkInterface> netInterfaces = NetworkInterface.getNetworkInterfaces();  

 

然后结合IP4的地址段做区分,主要利用以下两个方法:

Java代码   收藏代码
  1. ip.isSiteLocalAddress() && !ip.isLoopbackAddress()  

 

 

最终方法如下(从网上copy来的..)

 

 

Java代码   收藏代码
  1.     /** 
  2.      * 多IP处理,可以得到最终ip 
  3.      * @return 
  4.      */  
  5.     public static String getIp() {  
  6.         String localip = null;// 本地IP,如果没有配置外网IP则返回它  
  7.         String netip = null;// 外网IP  
  8.         try {  
  9.             Enumeration<NetworkInterface> netInterfaces = NetworkInterface  
  10.                     .getNetworkInterfaces();  
  11.             InetAddress ip = null;  
  12.             boolean finded = false;// 是否找到外网IP  
  13.             while (netInterfaces.hasMoreElements() && !finded) {  
  14.                 NetworkInterface ni = netInterfaces.nextElement();  
  15.                 Enumeration<InetAddress> address = ni.getInetAddresses();  
  16.                 while (address.hasMoreElements()) {  
  17.                     ip = address.nextElement();  
  18. //                  System.out.println(ni.getName() + ";" + ip.getHostAddress()  
  19. //                          + ";ip.isSiteLocalAddress()="  
  20. //                          + ip.isSiteLocalAddress()  
  21. //                          + ";ip.isLoopbackAddress()="  
  22. //                          + ip.isLoopbackAddress());  
  23.                     if (!ip.isSiteLocalAddress() && !ip.isLoopbackAddress()  
  24.                             && ip.getHostAddress().indexOf(":") == -1) {// 外网IP  
  25.                         netip = ip.getHostAddress();  
  26.                         finded = true;  
  27.                         break;  
  28.                     } else if (ip.isSiteLocalAddress()  
  29.                             && !ip.isLoopbackAddress()  
  30.                             && ip.getHostAddress().indexOf(":") == -1) {// 内网IP  
  31.                         localip = ip.getHostAddress();  
  32.                     }  
  33.                 }  
  34.             }  
  35.         } catch (SocketException e) {  
  36.             e.printStackTrace();  
  37.         }  
  38.         if (netip != null && !"".equals(netip)) {  
  39.             return netip;  
  40.         } else {  
  41.             return localip;  
  42.         }  
  43.     }  

 

你可能感兴趣的:(java)