IPUtil工具类,获取本机、远程IP的Java代码详解编程语言

import java.net.InetAddress; 
import java.net.NetworkInterface; 
import java.net.SocketException; 
import java.util.Enumeration; 
   
import javax.servlet.http.HttpServletRequest; 
   
/** 
 * IP工具类 
 * @author geeksun 
 * 2011-9-23 
 */ 
public class IpUtil { 
   
    /** 
     * @param 获取远程IP 
     * @return IP Address 
     */ 
    public static String getIpAddrByRequest(HttpServletRequest request) { 
        String ip = request.getHeader("x-forwarded-for"); 
        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { 
            ip = request.getHeader("Proxy-Client-IP"); 
        } 
        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { 
            ip = request.getHeader("WL-Proxy-Client-IP"); 
        } 
        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { 
            ip = request.getRemoteAddr(); 
        } 
        return ip; 
    } 
       
    /** 
     * @return 获取本机IP 
     * @throws SocketException 
     */ 
    public static String getRealIp() throws SocketException { 
        String localip = null;// 本地IP,如果没有配置外网IP则返回它 
        String netip = null;// 外网IP 
   
        Enumeration<NetworkInterface> netInterfaces =  
            NetworkInterface.getNetworkInterfaces(); 
        InetAddress ip = null; 
        boolean finded = false;// 是否找到外网IP 
        while (netInterfaces.hasMoreElements() && !finded) { 
            NetworkInterface ni = netInterfaces.nextElement(); 
            Enumeration<InetAddress> address = ni.getInetAddresses(); 
            while (address.hasMoreElements()) { 
                ip = address.nextElement(); 
                if (!ip.isSiteLocalAddress()  
                        && !ip.isLoopbackAddress()  
                        && ip.getHostAddress().indexOf(":") == -1) {// 外网IP 
                    netip = ip.getHostAddress(); 
                    finded = true; 
                    break; 
                } else if (ip.isSiteLocalAddress()  
                        && !ip.isLoopbackAddress()  
                        && ip.getHostAddress().indexOf(":") == -1) {// 内网IP 
                    localip = ip.getHostAddress(); 
                } 
            } 
        } 
       
        if (netip != null && !"".equals(netip)) { 
            return netip; 
        } else { 
            return localip; 
        } 
    } 
       
}

原创文章,作者:Maggie-Hunter,如若转载,请注明出处:https://blog.ytso.com/10552.html

(0)
上一篇 2021年7月19日
下一篇 2021年7月19日

相关推荐

发表回复

登录后才能评论