您的位置:首页 > 其它

判断IP是否为内网IP

2016-11-23 16:54 1716 查看
项目中,IP是用户操作信息的一个重要信息,但由于抓取有效性问题,会导致需要过滤一些局域网IP。具体方法如下:
java 代码

public static boolean isInnerIP(String ipAddress){
  

        boolean isInnerIp = false;
  

        long ipNum = getIpNum(ipAddress);   

        /**  

        私有IP:A类  10.0.0.0-10.255.255.255  

               B类  172.16.0.0-172.31.255.255  

               C类  192.168.0.0-192.168.255.255  

        当然,还有127这个网段是环回地址  

        **/  

        long aBegin = getIpNum("10.0.0.0");
  

        long aEnd = getIpNum("10.255.255.255");
  

        long bBegin = getIpNum("172.16.0.0");
  

        long bEnd = getIpNum("172.31.255.255");
  

        long cBegin = getIpNum("192.168.0.0");
  

        long cEnd = getIpNum("192.168.255.255");
  

        isInnerIp = isInner(ipNum,aBegin,aEnd) || isInner(ipNum,bBegin,bEnd) || isInner(ipNum,cBegin,cEnd) || ipAddress.equals("127.0.0.1");   

        return isInnerIp;              

}  

java 代码

private static long getIpNum(String ipAddress) {
  

    String [] ip = ipAddress.split("\\.");   

    long a = Integer.parseInt(ip[0]);   

    long b = Integer.parseInt(ip[1]);   

    long c = Integer.parseInt(ip[2]);   

    long d = Integer.parseInt(ip[3]);   

  

    long ipNum = a * 256 * 256 * 256 + b * 256 * 256 + c * 256 + d;
  

    return ipNum;   

}  

java 代码

private static boolean isInner(long userIp,long begin,long end){
  

     return (userIp>=begin) && (userIp<=end);   

}  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息