如题,
判断登录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;
}
这样判断正确吗?这种方法是否科学、严谨?
还有什么其它好的方法没,,
判断登录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;
}
这样判断正确吗?这种方法是否科学、严谨?
还有什么其它好的方法没,,
ip其实就是个long...
255.255.255.255用long来处理主要是防止出现负数溢出的问题,也就是当第一个数>=128的情况。
1、不能识别非法IP,比如:10.10.0.0 这个IP是不存在的;
2、无法做掩码判定(也就是子域判定),比如: 192.168.1.x 和 192.168.2.x 其实是跨域的。
不过我觉得都不是问题,条件 begin 和 end 的取值控制好就行了,没必要面面俱到。
这个方法判断的话,
比如100.100.100.1 - 100.100.101.1这个区间的IP判断,是不是也会吧100.100.100.300算是在这个区间内的呢?
不过你可以在进行这个方法判断之前,先判断这ip是不是正确的ip,如果是正确的ip在进行这个判断,应该就不会有问题的。
另外你的写法只能32位的ip的。
100.100.101.45但是这个IP地址根本就是非法的,用一个非法IP地址来判定其有效性,就显得很怪异。
假设说,IP段处于同一个网段,比如比较192.168.1.x
那只需要判断最后一位是不是在你的begin和end之间就行了
如果是不同网段之间的,那就是把四位ip转成long进行计算了