Following system colour scheme Selected dark colour scheme Selected light colour scheme

Python 개선 제안 한국어 번역

PEP 3144 – Python 표준 라이브러리용 IP 주소 조작 라이브러리

Author:
Peter Moody <pmoody at google.com>
BDFL-Delegate:
Alyssa Coghlan
Discussions-To:
ipaddr-py-dev@googlegroups.com
Status:
Final
Type:
Standards Track
Created:
06-Feb-2012
Python-Version:
3.3
Resolution:
Python-Dev message

Table of Contents

번역·라이선스 안내

이 비공식 한국어 번역은 원문 Copyright 절의 Public Domain 조건에 따라 제공합니다. 원저자와 공식 원문은 그대로 표시합니다. 수정되지 않은 기준 원문 · 공식 최신판

초록

이 PEP는 Python용 IP 주소 조작 모듈의 설계를 제안합니다.

PEP 승인

이 PEP는 2012년 5월 15일 Alyssa Coghlan이 승인했습니다.

동기

Python용으로 이미 매우 우수한 IP 주소 모듈이 여러 개 존재합니다. 사실 이들 모두 Python다운 원칙을 따르는 것과 네트워크 엔지니어 및 관리자가 의존하는 약식 표기 사이의 균형을 맞추는 데 어려움을 겪습니다. ipaddress는 적절한 균형을 이루는 것을 목표로 합니다.

근거

여러 Python IP 주소 조작 모듈이 존재한다는 사실은 이 모듈이 제공하려는 기능이 매우 필요하다는 증거입니다.

배경

PEP 3144ipaddr는 이전에도 포함이 제안된 적이 있습니다. 여기서 지정하는 라이브러리 버전은 PyPI의 버전 및 이전에 논의된 버전과 하위 호환되지 않습니다. 현재 ipaddr의 사용자들이 혼동하지 않도록 이 라이브러리 버전의 이름을 ipaddress로 변경했습니다.

ipaddr와 ipaddress의 주요 차이점은 다음과 같습니다.

  • ipaddress *Network 클래스는 strict 플래그가 True로 설정된 ipaddr *Network 클래스 대응 항목과 동일합니다.
  • ipaddress *Interface 클래스는 strict 플래그가 False로 설정된 ipaddr *Network 클래스 대응 항목과 동일합니다.
  • ipaddress의 팩토리 함수는 클래스와 혼동되지 않도록 이름을 변경했습니다.
  • 목적을 명확히 하기 위해 일부 속성의 이름도 변경했습니다. (예: network, network_address)
  • ipaddr에서 컨테이너를 반환하던 여러 메서드와 함수가 이제 이터레이터를 반환합니다. 여기에는 subnets, address_exclude, summarize_address_rangecollapse_address_list가 포함됩니다.

ipaddressipaddr사이의 하위 호환성이 없는 API 변경으로 인해, 새로운 provisional API 상태를 사용하여 모듈을 추가하자는 것이 제안입니다.

python-dev 관련 메시지:

사양

ipaddr모듈은 총 6개의 새로운 공개 클래스를 정의하며, IPv4 객체 조작용 3개와 IPv6 객체 조작용 3개로 구성됩니다. 클래스는 다음과 같습니다.

  • IPv4Address/IPv6Address는 개별 주소를 정의합니다. 예를 들어 www.google.com에 대한 A 레코드 조회에서 반환되는 IPv4 주소(74.125.224.84) 또는 ipv6.google.com에 대한 AAAA 레코드 조회에서 반환되는 IPv6 주소(2001:4860:4001:801::1011)가 있습니다.
  • IPv4Network/IPv6Network는 네트워크 또는 주소 그룹을 정의합니다. 예를 들어 멀티캐스트용으로 예약된 IPv4 네트워크(224.0.0.0/4) 또는 멀티캐스트용으로 예약된 IPv6 네트워크(ff00::/8, 와, 정말 큽니다)가 있습니다.
  • IPv4Interface/IPv6Interface - 이러한 하이브리드 클래스는 지정된 네트워크의 개별 주소를 나타냅니다. 예를 들어, 네트워크 192.0.2.0/24의 IPV4 주소 192.0.2.1은 192.0.2.1/24로 나타낼 수 있습니다. 마찬가지로, 네트워크 2001:DB8::/96의 IPv6 주소 2001:DB8::1은 2001:DB8::1/96으로 나타낼 수 있습니다. 컴퓨터 네트워크 인터페이스에 할당된 주소를 이와 같이 나타내는 경우가 매우 많으므로 Interface라는 이름이 붙었습니다.

모든 IPv4 클래스는 특정한 특성과 메서드를 공유합니다. 예를 들어 해당 클래스를 표현하는 데 필요한 비트 수, 특정 특수 IPv4 네트워크 범위에 속하는지 여부 등이 그러합니다. 마찬가지로 모든 IPv6 클래스도 특성과 메서드를 공유합니다.

ipaddr는 코드 중복을 최대한 방지하기 위해 상속을 광범위하게 사용합니다. 부모 클래스는 비공개이지만 여기에서 개괄적으로 설명합니다.

  • _IPAddrBase - 모든 ipaddr 객체에 공통된 메서드를 제공합니다.
  • _BaseAddress - IPv4AddressIPv6Address에 공통된 메서드를 제공합니다.
  • _BaseInterface - IPv4InterfaceIPv6Interface는 물론 IPv4NetworkIPv6Network에 공통된 메서드를 제공합니다(ipaddr는 Network 클래스를 Interface의 특수한 경우로 취급합니다).
  • _BaseV4 - 모든 IPv4 클래스에 공통된 메서드와 변수(예: _max_prefixlen)를 제공합니다.
  • _BaseV6 - 모든 IPv6 클래스에 공통된 메서드와 변수를 제공합니다.

서로 다른 IP 버전의 객체를 비교하면 TypeError가 발생합니다 [1]. 또한 서로 다른 _Base 부모 클래스를 가진 객체를 비교하면 TypeError가 발생합니다. _Base 부모 클래스 제한의 결과로 IPv4InterfaceIPv4Network와 비교할 수 있고 IPv6InterfaceIPv6Network와 비교할 수 있습니다.

참조 구현

현재 참조 구현은 다음에서 확인할 수 있습니다.

http://code.google.com/p/ipaddress-py/source/browse/ipaddress.py

README와 unittest를 포함하려면 tarball을 확인하십시오. http://code.google.com/p/ipaddress-py/downloads/detail?name=ipaddress-1.0.tar.gz

참조 구현 사용에 관한 자세한 정보는 다음에서 확인할 수 있습니다. http://code.google.com/p/ipaddr-py/wiki/Using3144

참고 자료