判断接收到的ip 是否在一个ip段范伟内(对代码分析后进行了注释)

来源:互联网 发布:织梦cms怎么用 编辑:程序博客网 时间:2024/06/14 22:41
package demo;public class IpUtil {           public static void main(String[] args){        String ip="219.226.222.0";        String ipSection="219.226.216.0-219.226.223.0";        boolean exists=ipExistsInRange(ip,ipSection);               System.out.println(exists);        System.out.println(getIp2long(ip));        System.out.println(getIp2long2(ip));    }               /**    * 验证IP是否属于某个IP段    * @param ip          所验证的IP号码  219.226.223.0    * @param ipSection   IP段(以'-'分隔)219.226.216.0-219.226.223.0    * @return    */   public static boolean ipExistsInRange(String ip,String ipSection) {        //去除前后空格        ipSection = ipSection.trim();        ip = ip.trim();        //获取'-'的位置坐标值        int idx = ipSection.indexOf('-');        //别截取前后ip的值        String beginIP = ipSection.substring(0, idx);        String endIP = ipSection.substring(idx + 1);               //对转换后的ip进行大小比较  返回true or  false        return getIp2long(beginIP)<=getIp2long(ip) && getIp2long(ip)<=getIp2long(endIP);    }      /**    * 对ip进行转换    * 方式1       * @param ip 所需转换的ip    * @return 对ip进行位运算后的值    */   public static long getIp2long(String ip) {       //去除前后空格        ip = ip.trim();        //根据给定正则表达式 切割字符串        String[] ips = ip.split("\\.");        long ip2long = 0L;        for (int i = 0; i < 4; ++i) {            //对0进行左移8位   与切割后的ip进行位运算转成2进制            ip2long = ip2long << 8 | Integer.parseInt(ips[i]);        }       return ip2long;    }      /**    * 对ip进行转换        * 方式2    * @param ip 所需转换的ip    * @return 对ip进行位运算后的值    */    public static long getIp2long2(String ip) {               ip = ip.trim();       String[] ips = ip.split("\\.");       long ip1 = Integer.parseInt(ips[0]);       long ip2 = Integer.parseInt(ips[1]);       long ip3 = Integer.parseInt(ips[2]);       long ip4 = Integer.parseInt(ips[3]);       long ip2long =1L* ip1 * 256 * 256 * 256 + ip2 * 256 * 256 + ip3 * 256 + ip4;       return ip2long;    }  }

0 0
原创粉丝点击