프로그래밍/Python

[python] netmask 문자열로 CIDR 형식의 비트 개수를 반환하는 방법

채윤아빠 2024. 4. 18. 08:19

개요

netmask 문자열(예: "255.255.255.0")을 CIDR 형식의 비트 개수(접두사 길이)를 얻는 방법을 정리해 둡니다.


CIDR 표기법이란?

CIDR(Classless Inter-Domain Routing) 형식은 IP 주소와 네트워크 마스크를 표현하는 간결하고 유연한 방법입니다. CIDR 표기법의 주요 특징은 다음과 같습니다.

  • IP 주소와 접두사 길이로 구성: 예를 들어, 192.168.0.0/24 형태로 표현합니다.
  • 접두사 길이: '/' 뒤의 숫자(0-32)로, 네트워크 부분의 비트 수를 나타냅니다.
  • 유연한 네트워크 구분: 기존의 클래스 기반 주소 체계와 달리, 네트워크와 호스트 부분을 유연하게 정의할 수 있습니다.
  • 효율적인 IP 주소 관리: 네트워크 주소 자원을 절약하고 효율적으로 할당할 수 있습니다.
  • 라우팅 테이블 최적화: 주소 집약을 통해 라우팅 테이블의 크기를 줄이고 패킷 지연을 감소시킵니다.

CIDR 형식은 네트워크 관리자가 IP 주소 공간을 더 효율적으로 사용하고 관리할 수 있게 해주며, 인터넷의 확장성을 개선하는 데 중요한 역할을 합니다.


netmask 문자열로 CIDR의 접두사 길이 구하기

def get_cidr_bit_count_for_netmask(netmask: str) -> int:
    """ netmask 문자열을 받아서 CIDR 형식으로 1 비트 개수를 반환합니다.

    Returns:
        int: netmask의 1 비트의 개수
    """
    octets = netmask.split(".")
    cidr = 0
    for octet in octets:
        # 10진수로 변환 후 이진수로 변환하여 1의 개수를 세기
        cidr += bin(int(octet)).count("1")
    return cidr


알아보기는 조금 어렵지만, 간략하게 다음과 같이 작성할 수도 있습니다.

def get_cidr_bit_count_for_netmask(netmask: str) -> int:
    """ netmask 문자열을 받아서 CIDR 형식으로 1 비트 개수를 반환합니다.

    Returns:
        int: netmask의 1 비트의 개수
    """
    return sum(bin(int(x)).count('1') for x in netmask.split('.'))

사용 예시

다음과 같이 간단한 사용 예제를 작성하여 실행합니다.

netmask = "255.255.255.0"
cidr = get_cidr_bit_count_for_netmask_old(netmask)
print(f'1. "{netmask}" CIDR bit count= {cidr}')

cidr = get_cidr_bit_count_for_netmask(netmask)
print(f'2. "{netmask}" CIDR bit count = {cidr}')


실행 결과는 다음과 같습니다.

1. "255.255.255.0" CIDR bit count= 24
2. "255.255.255.0" CIDR bit count = 24




728x90
반응형