이전 목록 다음

IPv6 표기가 이상합니다..ㅠㅠ

2026-03-28 (토) 22:42:50 220
이윰빌더를 사용하고 있고요.. 회원정보에서 아이피를 불러오는데..
IPv4 아이피는 정상적으로 나오는데..
IPv6 아이피가.. 이런식으로 나오네요
24065900900641079798149
이걸 어떻게 해야될지 감이 안오네요..;;
|

답변 1개

Copy
function normalizeIp($input) {
    $input = trim($input);

    // 1. IPv4 (일반 형식)
    if (filter_var($input, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4)) {
        return $input;
    }

    // 2. IPv6 (일반 형식)
    if (filter_var($input, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6)) {
        return $input;
    }

    // 3. 숫자만 있는 경우 (정수형 IP 판단)
    if (ctype_digit($input)) {

        // --- IPv4 정수 범위 ---
        if (bccomp($input, "4294967295") <= 0) {
            // IPv4 정수 → IPv4
            return long2ip((int)$input);
        }

        // --- IPv6 정수 범위 ---
        // 2^128 - 1
        $maxIpv6 = "340282366920938463463374607431768211455";

        if (bccomp($input, $maxIpv6) <= 0) {
            // IPv6 정수 → IPv6
            $hex = base_convert($input, 10, 16);

            // base_convert는 큰 수 부정확 → BCMath로 보정
            $hex = '';
            $num = $input;

            while (bccomp($num, "0") > 0) {
                $mod = bcmod($num, "16");
                $hex = dechex((int)$mod) . $hex;
                $num = bcdiv($num, "16", 0);
            }

            $hex = str_pad($hex, 32, '0', STR_PAD_LEFT);
            $bin = hex2bin($hex);

            return inet_ntop($bin);
        }
    }

    // 4. 그 외
    return "아이피 주소 형식 아님";
}

echo normalizeIp("192.168.0.1");
// → 192.168.0.1

echo normalizeIp("3232235521");
// → 192.168.0.1

echo normalizeIp("2001:db8::1");
// → 2001:db8::1

echo normalizeIp("24065900900641079798149");
// → (IPv6 주소로 변환됨)

echo normalizeIp("hello");
// → 아이피 주소 형식 아님

답변을 작성하려면 로그인이 필요합니다.