欢迎访问悦橙教程(wld5.com),关注java教程。悦橙教程  java问答|  每日更新
页面导航 : > > 文章正文

java获得真实IP,IP转数字代码实现,javaip,在有代理环境下要获得真实

来源: javaer 分享于  点击 28516 次 点评:152

java获得真实IP,IP转数字代码实现,javaip,在有代理环境下要获得真实


在有代理环境下要获得真实ip,必须先看X-RealIP和X-Forwarded-For两个http头,如果这两个请求头中有值的话,真实ip就从这里取值,否则再看request.getRemoteAddr()。

如下是获得真实IP的代码:

    /**     * 获取真实IP:     *    先取     * @param request     * @return     */    public static String getClientIP(HttpServletRequest request) {        String ip = request.getHeader("X-Real-IP");        if (StringUtil.isEmpty(ip) || "unknown".equalsIgnoreCase(ip)) {            ip = request.getHeader("X-Forwarded-For");        }        if (StringUtil.isEmpty(ip) || "unknown".equalsIgnoreCase(ip)) {            ip = request.getRemoteAddr();        }        return ip;    }

另外在程序还经常会用到ip和数字之间的相互转换,方法实现如下:

[Java]代码

package cn.outofmemory.util;import javax.servlet.http.HttpServletRequest;public class IPUtil {    /**     * IP转成数字类型     *      * @param strIP     * @return     */    public static long ipToLong(String strIP) {        long[] ip = new long[4];        int position1 = strIP.indexOf(".");        int position2 = strIP.indexOf(".", position1 + 1);        int position3 = strIP.indexOf(".", position2 + 1);        ip[0] = Long.parseLong(strIP.substring(0, position1));        ip[1] = Long.parseLong(strIP.substring(position1 + 1, position2));        ip[2] = Long.parseLong(strIP.substring(position2 + 1, position3));        ip[3] = Long.parseLong(strIP.substring(position3 + 1));        // ip1*256*256*256+ip2*256*256+ip3*256+ip4        return (ip[0] << 24) + (ip[1] << 16) + (ip[2] << 8) + ip[3];    }    /**     * 是否是本地IP     *      * @param strIp     * @return     */    public static boolean isLocal(String strIp) {        if ("127.0.0.1".equals(strIp))            return true;        long l = ipToLong(strIp);        if (l >= 3232235520L)            return l <= 3232301055L;        return (l >= 167772160L) && (l <= 184549375L);    }    /**     * @param args     */    public static void main(String[] args) {        // TODO Auto-generated method stub        System.out.println("202.102.249.59:"                + Long.toString(IPUtil.ipToLong("202.102.249.59")));        System.out.println("202.102.249.59 is local ip:"                + Boolean.toString(IPUtil.isLocal("202.102.249.59")));        System.out.println("127.0.0.1:"                + Long.toString(IPUtil.ipToLong("127.0.0.1")));        System.out.println("127.0.0.1 is local ip:"                + Boolean.toString(IPUtil.isLocal("127.0.0.1")));        System.out.println("10.9.1.134:"                + Long.toString(IPUtil.ipToLong("10.9.1.134")));        System.out.println("10.9.1.134 is local ip:"                + Boolean.toString(IPUtil.isLocal("10.9.1.134")));    }}
相关栏目:

用户点评