IP주소에는 IPv4와 IPv6 두 가지 형식이 있는데, 

 

IPv4는 "A.B.C.D" 형태로 나타내면, 여기서 A, B, C, D는 0 이상 255이하의 정수이다.

 

IPv6는 "A:B:C:D:E:F:G:H" 형태로 나타내며, A,B,C,D,E,F,G,H는 각각 네 자리의 16진수이다. 

 

주어진 IP 주소가 어떤 형식인지 확인하여, IPv4인지 IPv6인지 알려주는 코드

import re

def is_ipv4(address):
    ipv4_pattern = r'^((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])\.){3}(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])$'
    return re.match(ipv4_pattern, address) is not None

def is_ipv6(address):
    ipv6_pattern = r'^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|' \
                   r'([0-9a-fA-F]{1,4}:){1,7}:|' \
                   r'([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|' \
                   r'([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|' \
                   r'([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|' \
                   r'([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|' \
                   r'([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|' \
                   r'[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|' \
                   r':((:[0-9a-fA-F]{1,4}){1,7}|:)|' \
                   r'fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|' \
                   r'::(ffff(:0{1,4}){0,1}:){0,1}(([0-9]{1,3}\.){3}[0-9]{1,3})|' \
                   r'([0-9a-fA-F]{1,4}:){1,4}:(([0-9]{1,3}\.){3}[0-9]{1,3}))$'
    return re.match(ipv6_pattern, address) is not None

address = input().strip()

if is_ipv4(address):
    print("IPv4")
elif is_ipv6(address):
    print("IPv6")

'알고리즘' 카테고리의 다른 글

N을 보는 시각  (2) 2025.03.30
기둥 세우기  (0) 2025.03.30
백준 파이썬 - 9506  (1) 2024.02.02
백준 파이썬 - 2869  (0) 2024.02.02
백준 파이썬 - 2292  (0) 2024.01.30

+ Recent posts