java获取本机ip地址

来源:互联网 发布:吸毒人群数据 编辑:程序博客网 时间:2024/05/21 18:15
package com.zhangfeiyan;import java.net.InetAddress;import java.net.NetworkInterface;import java.net.SocketException;import java.net.UnknownHostException;import java.util.Enumeration;public class IPAquire {   private static volatile String cachedIpAddress;     public static void main(String[] args) {    String ip = getIp();    System.out.println(ip);}   /**    * 获取本机IP地址.    * 有限获取外网IP地址. 也有可能是链接着路由器的最终IP地址.    *    * @return 本机IP地址    */   public static String getIp() {       if (null != cachedIpAddress) {            return cachedIpAddress;       }       Enumeration<NetworkInterface> netInterfaces = null;       try {           netInterfaces = NetworkInterface.getNetworkInterfaces();       } catch (final SocketException ex) {           // throw new JobException(ex);       }       String localIpAddress = null;       while (netInterfaces.hasMoreElements()) {           NetworkInterface netInterface = netInterfaces.nextElement();           Enumeration<InetAddress> ipAddresses = netInterface.getInetAddresses();           while (ipAddresses.hasMoreElements()) {               InetAddress ipAddress = ipAddresses.nextElement();               if (isPublicIpAddress(ipAddress)) {                   String publicIpAddress = ipAddress.getHostAddress();                   cachedIpAddress = publicIpAddress;                   return publicIpAddress;               }               if (isLocalIpAddress(ipAddress)) {                   localIpAddress = ipAddress.getHostAddress();               }           }       }       cachedIpAddress = localIpAddress;       return localIpAddress;   }   /**    * 获取本机Host名称.    *    * @return 本机Host名称    */   public String getHostName() {       return getLocalHost().getHostName();   }   private static boolean isPublicIpAddress(final InetAddress ipAddress) {       return !ipAddress.isSiteLocalAddress() && !ipAddress.isLoopbackAddress() && !isV6IpAddress(ipAddress);   }   private static boolean isLocalIpAddress(final InetAddress ipAddress) {       return ipAddress.isSiteLocalAddress() && !ipAddress.isLoopbackAddress() && !isV6IpAddress(ipAddress);   }   private static boolean isV6IpAddress(final InetAddress ipAddress) {       return ipAddress.getHostAddress().contains(":");   }   private static InetAddress getLocalHost() {       InetAddress result = null;       try {           result = InetAddress.getLocalHost();       } catch (final UnknownHostException ex) {           // throw new JobException(ex);       }       return result;   }}


原创粉丝点击