在开发项目时,遇到ip白名单是ip地址段的情况,之前只是对某个ip进行拦截匹配,现在要支持ip地址段的匹配,查了好多文章,大致思路就是把ip地址转化成long类型,然后匹配long类型的大小。
具体实现方式如下:
private static long ip2Long(String ip) {
String[] ipArr;
double num = 0;
if (ip != null && !"".equals(ip)) {
ipArr = ip.split("\\.");
for (int i = ipArr.length - 1; i >= 0; i--) {
num += ((Integer.parseInt(ipArr[i]) % 256) * Math.pow(256, (3 - i)));
}
}
return (long) num;
}
public static boolean ipIsInner(String ip, String start, String end) {
long longIp = ip2Long(ip);
return longIp >= ip2Long(start) && longIp <= ip2Long(end);
}
public static void main(String[] args) {
String start = "222.35.255.0";
String end = "222.35.255.20";
String ip = "222.35.255.0";
System.out.println(ipIsInner(ip, start, end));
}