JAVA----IP 黑名单,常用于限制用户登录,注册信息

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

版权声明:本文为damys原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。