判断ip是否在某ip范围内
文章目录
判断某个ip是否在[start,end]两个ip的范围内,即判断start≤ip≤end是否符合。
首先分析start≤ip。
因为ip的一般形式为 "a.b.c.d"
,通过 .
将整个ip分为四段。假设判断的ip为{a,b,c,d},start为{a1,b1,c1,d1}。从左开始分析的话,每段有小于、等于、大于三个比较关系。如果a>a1,直接就能说明ip>start,不用再继续判断start后面的段;如果a=a1,则需要继续判断start剩下部分;如果a<a1,说明ip<start,直接返回false即可。
因为还存在start=ip的情况,所以需要保留循环的次数,如果比较到最后一段,说明start≤ip。
end的比较与start同理。
代码如下:
public static boolean ipInRange(String ip,String start,String end){
String[] ips=ip.split("\\\\.");
String[] starts=start.split("\\\\.");
String[] ends=end.split("\\\\.");
boolean flags=false,flage=false; //flags为true代表ip已经符合start,不用判断;flage标记end
int i=0;
for (; i <ips.length; i++){
int t_ip=Integer.parseInt(ips[i]);
int t_start=Integer.parseInt(starts[i]);
int t_end=Integer.parseInt(ends[i]);
if(!flags){
if(t_ip>t_start){
flags=true; //说明start不用判断了
}else if(t_ip<t_start){
return false; //说明ip小于start
}
}
if(!flage){
if(t_ip<t_end){
flage=true;
}else if(t_ip>t_end){
return false;
}
}
}
return (flags&&flage)||i==ips.length; //i==ips.length为true代表ip从头判断到尾,说明ip与某个边界相等。
}
public static void main(String[] args) {
System.out.println(ipInRange("192.168.215.253","192.168.215.1","192.168.215.252"));
}
文章作者 梧桐碎梦
上次更新 2021-11-07 15:33:03