006. Java 에서 Local IP 와 NAT IP validation 그리고 Testcode

✔️ Local IP는 사설 네트워크 범위(10.x.x.x, 172.16.x.x ~ 172.31.x.x, 192.168.x.x)

✔️ NAT IP는 사설 IP를 제외한 모든 IPv4 주소

✔️ Java & Spring Boot에서 정규식 검증 적용 가능

Validation code

import java.util.regex.Pattern;

public class IPValidator {

    // Local IP 정규식
    private static final String LOCAL_IP_REGEX =
            "^(10\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3})$|" +  // 10.x.x.x
            "^(172\\.(1[6-9]|2[0-9]|3[0-1])\\.\\d{1,3}\\.\\d{1,3})$|" + // 172.16.x.x ~ 172.31.x.x
            "^(192\\.168\\.\\d{1,3}\\.\\d{1,3})$";  // 192.168.x.x

    // NAT IP (공인 IP) 정규식 (사설 IP, 루프백 제외)
    private static final String PUBLIC_IP_REGEX =
            "^(?!10\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}$)" +
            "(?!172\\.(1[6-9]|2[0-9]|3[0-1])\\.\\d{1,3}\\.\\d{1,3}$)" +
            "(?!192\\.168\\.\\d{1,3}\\.\\d{1,3}$)" +
            "(?!127\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}$)" +
            "(\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3})$";

    public static boolean isLocalIp(String ip) {
        return Pattern.matches(LOCAL_IP_REGEX, ip);
    }

    public static boolean isPublicIp(String ip) {
        return Pattern.matches(PUBLIC_IP_REGEX, ip);
    }
}

Test code

Last updated