自己实现的符合ip范围的方法
1.支持直接匹配
2.支持ip段如,192.168.1-4.23 或者 192.168.1.1-50
3.支持\*如 192.168.1.*
/**
* 校验ip是否符合规则,一个符合规则为符合
* @param rules
* @param ip
* @return
*/
public static boolean checkIpByRules(String[] rules, String ip){
for(String rule : rules){
if(checkIpByRule(rule,ip)){
System.out.println("ip:"+ip+" 符合规则:"+rule);
return true;
}
}
return false;
}
/**
* 校验ip是否符合某个规则
* @param rule
* @param ip
* @return
*/
public static boolean checkIpByRule(String rule, String ip){
String[] subruls = rule.split("\\.");
String[] subip = ip.split("\\.");
for(int i = 0; i < 4; i++){
if(!isInScope(subruls[i],subip[i])){
return false;
}
}
return true;
}
/**
* 校验每段是否符合标准
* @param subRuleStr
* @param subIpStr
* @return
*/
private static boolean isInScope(String subRuleStr, String subIpStr){
// 如果是星直接符合
if( subRuleStr.equals("*")){
return true;
}
// 如果是数字 直接看是否等于
if(subRuleStr.matches("\\d+") && subRuleStr.equals(subIpStr)){
return true;
}
// 如果是范围则比较是否在范围内
if(subRuleStr.matches("\\d+-\\d+")){
String[] split = subRuleStr.split("-");
int lowIp = Integer.parseInt(split[0]);
int upIp = Integer.parseInt(split[1]);
int subIp = Integer.parseInt(subIpStr);
if(subIp <=upIp && subIp >= lowIp){
return true;
}
}
return false;
}