如题,
判断登录IP是否在指定IP区间的方法public static long getIpNum(String ipAddress){
String[] ip = ipAddress.split("\\.");
return Long.parseLong(ip[0]) * 256 * 256 * 256 + Long.parseLong(ip[1]) * 256 * 256 + Long.parseLong(ip[2]) * 256 + Long.parseLong(ip[3]); 
}

public static boolean isInner(long ip, long begin, long end) {
return ip >= begin && ip <= end;
}
这样判断正确吗?这种方法是否科学、严谨?
还有什么其它好的方法没,,

解决方案 »

  1.   

    木有问题..
    ip其实就是个long...
      

  2.   

    如1楼所说,没有任何问题。但不是long,是int,四个字节(0~255):
      255.255.255.255用long来处理主要是防止出现负数溢出的问题,也就是当第一个数>=128的情况。
      

  3.   

    严谨性问题要看你怎么使用它,无非是两种:
      1、不能识别非法IP,比如:10.10.0.0 这个IP是不存在的;
      2、无法做掩码判定(也就是子域判定),比如: 192.168.1.x 和 192.168.2.x 其实是跨域的。
    不过我觉得都不是问题,条件 begin 和 end 的取值控制好就行了,没必要面面俱到。
      

  4.   


    这个方法判断的话,
    比如100.100.100.1 - 100.100.101.1这个区间的IP判断,是不是也会吧100.100.100.300算是在这个区间内的呢?
    不过你可以在进行这个方法判断之前,先判断这ip是不是正确的ip,如果是正确的ip在进行这个判断,应该就不会有问题的。
    另外你的写法只能32位的ip的。
      

  5.   

    如6楼所说, 100.100.100.300 不会被算入这个区间,因为折算后相当于是:
     100.100.101.45但是这个IP地址根本就是非法的,用一个非法IP地址来判定其有效性,就显得很怪异。
      

  6.   

    前面说了,要看你是不是需要考虑跨域问题
    假设说,IP段处于同一个网段,比如比较192.168.1.x
    那只需要判断最后一位是不是在你的begin和end之间就行了
    如果是不同网段之间的,那就是把四位ip转成long进行计算了