IP 黑名单,常用于IP 黑白名单的检测
程序级:限制用户登录,恶意注册信息等
服务器级:设置安全组件,网关ip 黑,白名单等
public class IPUtils {
/**
* 匹配IP
* 全匹配:127.0.0.1
* 模糊匹配:127.*.*.*, 127.0.*.*, 127.0.0.* 星符号后面需全部为 *
*
* @param ip
* @param ips
* @return
*/
public static boolean matchIp(String ip, List<String> ips) {
if (ips.size() == 0) {
return false;
}
if (ips.contains(ip)) {
return true;
}
// 模糊匹配:带有 *
boolean isFind = false;
for (String key : ips) {
if (key.contains("*")) {
String[] single = key.split("\\.");
for (int i = 0; i<4; i++) {
// 不为* 替代符则检查
isFind = true;
if (!single[i].equals("*") && !single[i].equals(ip.split("\\.")[i])) {
isFind = false;
break;
}
}
// 如果是true则找到有一个匹配成功的就返回
if (isFind) return true;
}
}
return false;
}
}
测试
String limitIp = "117.136.92.47";
String ip = getHostIp();
log.info("设置限制IP {}, 查询IP {}, 匹配结果 {}", limitIp, ip, IPUtils.matchIp(ip, Arrays.asList(limitIp.split(","))));
// 设置限制IP 117.136.92.47, 查询IP 117.136.92.47, 匹配结果 true
// 设置限制IP 117.136.92.40, 查询IP 117.136.92.47, 匹配结果 false
// 设置限制IP 117.136.92.*, 查询IP 117.136.92.47, 匹配结果 true