對源IP存在*的地址進行目標IP的校驗

源IP可能爲        172.*      172.1.*      172.1.2.* 或者 172.*.2.* 之類的

目標IP 爲 172.1.1.1

思路就是  根據 點 來判斷  是哪一種帶*的源IP  然後進行判斷  

對應172.*.1.2 這種的需要特殊處理  方法如下  將IP以點切割後  根據不是*的座標  將源IP和目標IP拼接新的IP進行比較

public static Boolean checkIp(String targetIP,String sourceIP){
    String[] targetIPArry = targetIP.split("\\.");
    String[] sourceIPArry = sourceIP.split("\\.");
    String newSourceIP = "";
    List<Integer> indexArry = new ArrayList();
    for(int i = 0;i<sourceIPArry.length;i++){
        if(!"*".equals(sourceIPArry[i])){
            newSourceIP += sourceIPArry[i];
            indexArry.add(i);
        }
    }
    String newTargetIP = "";
    for(int j = 0;j<indexArry.size();j++){
        newTargetIP += targetIPArry[indexArry.get(j)];
    }
    if(newSourceIP.equals(newTargetIP)){
        return true;
    }
    return false;
}

 

 

整體如下

String[] str = whiteIpList.split(";");
List<String> list = Arrays.asList(str);
//新增邏輯 支持* 如:172.*  172.1.*  *.1.2.3/172.*.2.3/172.1.*.3/172.1.2.*
boolean flag = false;
for(int i = 0;i<list.size();i++){
   String sourceIP = list.get(i).toString();
   if(sourceIP.split("\\.").length < 4&&requestIp.startsWith(sourceIP.substring(0,sourceIP.indexOf(".")))){
      //說明172.*   172.1.*
      flag = true;
      break;
   }else{
      if(sourceIP.indexOf("*")>-1){
         if(checkIp(requestIp,sourceIP)){
            flag = true;
            break;
         }
      }else if(sourceIP.equals(requestIp)){
         flag = true;
         break;
      }
   }
}

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章