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을 보는 시각 (1) | 2025.03.30 |
---|---|
기둥 세우기 (0) | 2025.03.30 |
백준 파이썬 - 9506 (1) | 2024.02.02 |
백준 파이썬 - 2869 (0) | 2024.02.02 |
백준 파이썬 - 2292 (0) | 2024.01.30 |