ipaddress
— IPv4/IPv6 조작 라이브러리¶
소스 코드: Lib/ipaddress.py
ipaddress
는 IPv4와 IPv6 주소와 네트워크를 만들고, 조작하고, 연산하는 기능을 제공합니다.
이 모듈의 함수와 클래스를 사용하면 두 호스트가 같은 서브 네트에 있는지 확인하기, 특정 서브 네트의 모든 호스트를 이터레이트 하기, 문자열이 유효한 IP 주소나 네트워크를 나타내는지 검사하기 등 IP 주소와 관련된 다양한 작업을 간단하게 처리할 수 있습니다.
이것은 전체 모듈 API 레퍼런스입니다 - 개요와 소개는 ipaddress 모듈에 대한 소개를 참조하십시오.
버전 3.3에 추가.
편의 팩토리 함수¶
ipaddress
모듈은 IP 주소, 네트워크 및 인터페이스를 편리하게 만드는 팩토리 함수를 제공합니다:
- ipaddress.ip_address(address)¶
Return an
IPv4Address
orIPv6Address
object depending on the IP address passed as argument. Either IPv4 or IPv6 addresses may be supplied; integers less than2**32
will be considered to be IPv4 by default. AValueError
is raised if address does not represent a valid IPv4 or IPv6 address.>>> ipaddress.ip_address('192.168.0.1') IPv4Address('192.168.0.1') >>> ipaddress.ip_address('2001:db8::') IPv6Address('2001:db8::')
- ipaddress.ip_network(address, strict=True)¶
Return an
IPv4Network
orIPv6Network
object depending on the IP address passed as argument. address is a string or integer representing the IP network. Either IPv4 or IPv6 networks may be supplied; integers less than2**32
will be considered to be IPv4 by default. strict is passed toIPv4Network
orIPv6Network
constructor. AValueError
is raised if address does not represent a valid IPv4 or IPv6 address, or if the network has host bits set.>>> ipaddress.ip_network('192.168.0.0/28') IPv4Network('192.168.0.0/28')
- ipaddress.ip_interface(address)¶
Return an
IPv4Interface
orIPv6Interface
object depending on the IP address passed as argument. address is a string or integer representing the IP address. Either IPv4 or IPv6 addresses may be supplied; integers less than2**32
will be considered to be IPv4 by default. AValueError
is raised if address does not represent a valid IPv4 or IPv6 address.
이러한 편의 함수들의 한 가지 단점은 IPv4와 IPv6 형식을 모두 처리해야 한다는 것이, 함수가 IPv4나 IPv6 형식 중 어느 것을 의도하는지 알 수 없기 때문에, 에러 메시지가 정확한 에러에 대한 정보를 최소한으로만 제공한다는 것을 의미한다는 것입니다. 적절한 버전 별 클래스 생성자를 직접 호출하여 더 자세한 에러 보고를 얻을 수 있습니다.
IP 주소¶
주소 객체¶
IPv4Address
와 IPv6Address
객체는 많은 공통 어트리뷰트를 공유합니다. IPv6 주소에만 의미가 있는 일부 어트리뷰트는 두 IP 버전을 모두 올바르게 처리하는 코드를 더 쉽게 작성할 수 있도록 IPv4Address
객체에 의해 구현됩니다. 주소 객체는 해시 가능해서, 딕셔너리에서 키로 사용할 수 있습니다.
- class ipaddress.IPv4Address(address)¶
IPv4 주소를 구성합니다. address가 유효한 IPv4 주소가 아니면
AddressValueError
가 발생합니다.다음은 유효한 IPv4 주소를 구성합니다:
A string in decimal-dot notation, consisting of four decimal integers in the inclusive range 0–255, separated by dots (e.g.
192.168.0.1
). Each integer represents an octet (byte) in the address. Leading zeroes are not tolerated to prevent confusion with octal notation.32비트에 맞는 정수.
길이가 4인
bytes
객체에 채워진 정수 (가장 유효한 옥텟이 먼저 옵니다).
>>> ipaddress.IPv4Address('192.168.0.1') IPv4Address('192.168.0.1') >>> ipaddress.IPv4Address(3232235521) IPv4Address('192.168.0.1') >>> ipaddress.IPv4Address(b'\xC0\xA8\x00\x01') IPv4Address('192.168.0.1')
버전 3.8에서 변경: Leading zeros are tolerated, even in ambiguous cases that look like octal notation.
버전 3.9.5에서 변경: Leading zeros are no longer tolerated and are treated as an error. IPv4 address strings are now parsed as strict as glibc
inet_pton()
.- version¶
적절한 버전 번호: IPv4의 경우
4
, IPv6의 경우6
.
- max_prefixlen¶
이 버전에 대한 주소 표현의 총 비트 수: IPv4의 경우
32
, IPv6의 경우128
.접두사는 주소가 네트워크의 일부인지를 판별하기 위해 비교되는 주소의 선행 비트 수를 정의합니다.
- compressed¶
- exploded¶
점으로 구분된 십진 표기법의 문자열 표현. 선행 0은 표현에 포함되지 않습니다.
IPv4는 옥텟이 0으로 설정된 주소에 대한 약식 표기법을 정의하지 않기 때문에, 이 두 어트리뷰트는 IPv4 주소의 경우 항상
str(addr)
과 같습니다. 이러한 어트리뷰트를 노출하면 IPv4와 IPv6 주소를 모두 처리할 수 있는 디스플레이 코드를 더 쉽게 작성할 수 있습니다.
- reverse_pointer¶
IP 주소에 대한 역 DNS PTR 레코드의 이름, 예를 들어:
>>> ipaddress.ip_address("127.0.0.1").reverse_pointer '1.0.0.127.in-addr.arpa' >>> ipaddress.ip_address("2001:db8::1").reverse_pointer '1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.8.b.d.0.1.0.0.2.ip6.arpa'
이 이름은 결정된(resolved) 호스트명 자체가 아니라 PTR 조회를 수행하는 데 사용할 수 있는 이름입니다.
버전 3.5에 추가.
- is_private¶
True
if the address is defined as not globally reachable by iana-ipv4-special-registry (for IPv4) or iana-ipv6-special-registry (for IPv6) with the following exceptions:is_private
isFalse
for the shared address space (100.64.0.0/10
)For IPv4-mapped IPv6-addresses the
is_private
value is determined by the semantics of the underlying IPv4 addresses and the following condition holds (seeIPv6Address.ipv4_mapped
):address.is_private == address.ipv4_mapped.is_private
is_private
has value opposite tois_global
, except for the shared address space (100.64.0.0/10
range) where they are bothFalse
.버전 3.11.10에서 변경: Fixed some false positives and false negatives.
192.0.0.0/24
is considered private with the exception of192.0.0.9/32
and192.0.0.10/32
(previously: only the192.0.0.0/29
sub-range was considered private).64:ff9b:1::/48
is considered private.2002::/16
is considered private.There are exceptions within
2001::/23
(otherwise considered private):2001:1::1/128
,2001:1::2/128
,2001:3::/32
,2001:4:112::/48
,2001:20::/28
,2001:30::/28
. The exceptions are not considered private.
- is_global¶
True
if the address is defined as globally reachable by iana-ipv4-special-registry (for IPv4) or iana-ipv6-special-registry (for IPv6) with the following exception:For IPv4-mapped IPv6-addresses the
is_private
value is determined by the semantics of the underlying IPv4 addresses and the following condition holds (seeIPv6Address.ipv4_mapped
):address.is_global == address.ipv4_mapped.is_global
is_global
has value opposite tois_private
, except for the shared address space (100.64.0.0/10
range) where they are bothFalse
.버전 3.4에 추가.
버전 3.11.10에서 변경: Fixed some false positives and false negatives, see
is_private
for details.
- is_reserved¶
주소가 그 외에 IETF 예약되었으면
True
.
- IPv4Address.__format__(fmt)¶
명시적 포맷 문자열로 제어되는 IP 주소의 문자열 표현을 반환합니다. fmt는 다음 중 하나일 수 있습니다:
str()
과 동등한 기본 옵션인's'
, 0으로 채워진 이진수 문자열을 위한'b'
, 대문자나 소문자 16진수 표현을 위한'X'
나'x'
, 또는 IPv4 주소의 경우'b'
와 IPv6의 경우'x'
와 동등한'n'
. 이진수와 16진수 표현의 경우, 형식 지정자'#'
과 그룹화 옵션'_'
를 사용할 수 있습니다.__format__
은format
,str.format
및 f-문자열에서 사용됩니다.>>> format(ipaddress.IPv4Address('192.168.0.1')) '192.168.0.1' >>> '{:#b}'.format(ipaddress.IPv4Address('192.168.0.1')) '0b11000000101010000000000000000001' >>> f'{ipaddress.IPv6Address("2001:db8::1000"):s}' '2001:db8::1000' >>> format(ipaddress.IPv6Address('2001:db8::1000'), '_X') '2001_0DB8_0000_0000_0000_0000_0000_1000' >>> '{:#_n}'.format(ipaddress.IPv6Address('2001:db8::1000')) '0x2001_0db8_0000_0000_0000_0000_0000_1000'
버전 3.9에 추가.
- class ipaddress.IPv6Address(address)¶
IPv6 주소를 구성합니다. address가 유효한 IPv6 주소가 아니면
AddressValueError
가 발생합니다.다음은 유효한 IPv6 주소를 구성합니다:
4개의 16진수로 구성된 그룹 8개로 구성된 문자열, 각 그룹은 16비트를 나타냅니다. 그룹은 콜론으로 구분됩니다. 이것은 펼쳐진(exploded) (longhand) 표기법을 기술합니다. 문자열은 다양한 방법으로 압축될(compressed) (약식 표기법) 수도 있습니다. 자세한 내용은 RFC 4291을 참조하십시오. 예를 들어,
"0000:0000:0000:0000:0000:0abc:0007:0def"
는"::abc:7:def"
로 압축될 수 있습니다.선택적으로, 문자열은 접미사
%scope_id
로 표시되는 스코프 존(scope zone) ID를 가질 수도 있습니다. 존재하면, 스코프 ID는 비어 있지 않아야 하며,%
를 포함할 수 없습니다. 자세한 내용은 RFC 4007을 참조하십시오. 예를 들어,fe80::1234%1
는 노드의 첫 번째 링크에서 주소fe80::1234
를 식별할 수 있습니다.128비트에 맞는 정수.
길이가 16인
bytes
객체에 채워진 정수, 빅 엔디안.
>>> ipaddress.IPv6Address('2001:db8::1000') IPv6Address('2001:db8::1000') >>> ipaddress.IPv6Address('ff02::5678%1') IPv6Address('ff02::5678%1')
- compressed¶
주소 표현의 짧은 형식, 그룹에서 선행 0을 생략하고 0으로만 구성된 그룹의 가장 긴 시퀀스를 하나의 빈 그룹으로 축소됩니다.
이것은 IPv6 주소에 대해
str(addr)
가 반환하는 값이기도 합니다.- exploded¶
주소 표현의 긴 형식, 모든 선행 0과 완전히 0으로 구성된 그룹이 포함됩니다.
다음 어트리뷰트와 메서드에 대해서는,
IPv4Address
클래스의 해당 설명서를 참조하십시오:- packed¶
- reverse_pointer¶
- version¶
- max_prefixlen¶
- is_multicast¶
- is_private¶
- is_global¶
- is_unspecified¶
- is_reserved¶
- is_loopback¶
- is_link_local¶
버전 3.4에 추가: is_global
- is_site_local¶
주소가 사이트 로컬 사용을 위해 예약되었으면
True
. 사이트 로컬 주소 공간은 RFC 3879에서 폐지되었음에 유의하십시오.is_private
를 사용하여 이 주소가 RFC 4193에 의해 정의된 고유한 로컬 주소 공간에 있는지 검사하십시오.
- ipv4_mapped¶
IPv4에 매핑된 주소(
::FFFF/96
으로 시작합니다)로 표시되는 주소의 경우, 이 프로퍼티는 내장 IPv4 주소를 보고합니다. 다른 주소의 경우, 이 프로퍼티는None
이 됩니다.
- scope_id¶
RFC 4007에서 정의된 스코프 지정된 주소의 경우, 이 프로퍼티는 주소가 속한 주소 스코프의 특정 존(zone)을 문자열로 식별합니다. 스코프 존이 지정되지 않았으면, 이 프로퍼티는
None
입니다.
- IPv6Address.__format__(fmt)¶
IPv4Address
의 해당 메서드 설명서를 참조하십시오.버전 3.9에 추가.
문자열과 정수로의 변환¶
socket 모듈과 같은 네트워킹 인터페이스와 상호 운용하려면, 주소를 문자열이나 정수로 변환해야 합니다. 이것은 str()
과 int()
내장 함수를 사용하여 처리됩니다:
>>> str(ipaddress.IPv4Address('192.168.0.1'))
'192.168.0.1'
>>> int(ipaddress.IPv4Address('192.168.0.1'))
3232235521
>>> str(ipaddress.IPv6Address('::1'))
'::1'
>>> int(ipaddress.IPv6Address('::1'))
1
IPv6 스코프 지정된 주소는 스코프 존 ID 없이 정수로 변환됨에 유의하십시오.
연산자¶
주소 객체는 일부 연산자를 지원합니다. 달리 명시하지 않는 한, 연산자는 호환 가능한 객체 간에만 적용할 수 있습니다 (즉 IPv4와 IPv4, IPv6와 IPv6).
비교 연산자¶
주소 객체는 일반적인 비교 연산자 집합으로 비교할 수 있습니다. 다른 스코프 존(scope zone) ID를 가진 같은 IPv6 주소는 같지 않습니다. 몇 가지 예:
>>> IPv4Address('127.0.0.2') > IPv4Address('127.0.0.1')
True
>>> IPv4Address('127.0.0.2') == IPv4Address('127.0.0.1')
False
>>> IPv4Address('127.0.0.2') != IPv4Address('127.0.0.1')
True
>>> IPv6Address('fe80::1234') == IPv6Address('fe80::1234%1')
False
>>> IPv6Address('fe80::1234%1') != IPv6Address('fe80::1234%2')
True
산술 연산자¶
주소 객체에 정수를 더하거나 뺄 수 있습니다. 몇 가지 예:
>>> IPv4Address('127.0.0.2') + 3
IPv4Address('127.0.0.5')
>>> IPv4Address('127.0.0.2') - 3
IPv4Address('126.255.255.255')
>>> IPv4Address('255.255.255.255') + 1
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ipaddress.AddressValueError: 4294967296 (>= 2**32) is not permitted as an IPv4 address
IP 네트워크 정의¶
IPv4Network
와 IPv6Network
객체는 IP 네트워크 정의를 정의하고 검사하기 위한 메커니즘을 제공합니다. 네트워크 정의는 마스크(mask)와 네트워크 주소(network address)로 구성되며, 마스크로 마스크 (바이너리 AND) 될 때 네트워크 주소와 같은 IP 주소 범위를 정의합니다. 예를 들어,, 마스크 255.255.255.0
과 네트워크 주소 192.168.1.0
으로 구성된 네트워크 정의는 192.168.1.0
에서 192.168.1.255
까지의 IP 주소로 구성됩니다.
접두사, 네트 마스크 및 호스트 마스크¶
IP 네트워크 마스크를 지정하는 몇 가지 동등한 방법이 있습니다. 접두사(prefix) /<nbits>
는 네트워크 마스크에 설정된 상위 비트 수를 나타내는 표기법입니다. 네트 마스크(net mask)는 몇 개의 상위 비트가 설정된 IP 주소입니다. 따라서 접두사 /24
는 IPv4에서 네트 마스크 255.255.255.0
, 또는 IPv6에서 ffff:ff00::
와 동등합니다. 또한 호스트 마스크(host mask)는 네트 마스크(net mask)의 논리적 역전이며, 때로 네트워크 마스크를 나타내기 위해 (예를 들어 Cisco 접근 제어 목록에서) 사용됩니다. IPv4에서 /24
에 해당하는 호스트 마스크는 0.0.0.255
입니다.
네트워크 객체¶
주소 객체가 구현하는 모든 어트리뷰트는 네트워크 객체도 구현합니다. 또한, 네트워크 객체는 추가 어트리뷰트를 구현합니다. 이 모든 것은 IPv4Network
와 IPv6Network
사이에서 공통이라서, 중복을 피하고자 IPv4Network
에 대해서만 설명됩니다. 네트워크 객체는 해시 가능해서 딕셔너리에서 키로 사용할 수 있습니다.
- class ipaddress.IPv4Network(address, strict=True)¶
IPv4 네트워크 정의를 구성합니다. address는 다음 중 하나일 수 있습니다:
IP 주소와 선택적 마스크로 구성되고, 슬래시(
/
)로 구분된 문자열. IP 주소는 네트워크 주소이며, 마스크는 접두사를 뜻하는 단일 숫자이거나 IPv4 주소의 문자열 표현일 수 있습니다. 후자의 경우, 마스크는 0이 아닌 필드로 시작하면 네트 마스크로, 또는 0으로 시작하면 호스트 마스크로 해석되는데, 네트 마스크로 취급되는 모든 0인 마스크만 유일한 예외입니다. 마스크가 제공되지 않으면,/32
로 간주합니다.예를 들어, 다음 address 명세는 동등합니다:
192.168.1.0/24
,192.168.1.0/255.255.255.0
및192.168.1.0/0.0.0.255
.32비트에 맞는 정수. 이는 네트워크 주소가 address이고 마스크가
/32
인 단일 주소 네트워크와 동등합니다.길이가 4인
bytes
객체에 채워진 정수, 빅 엔디안. 해석은 정수 address와 유사합니다.주소 기술과 네트 마스크의 2-튜플. 주소 기술은 문자열, 32비트 정수, 길이 4인 바이트열에 채워진 정수 또는 기존 IPv4Address 객체입니다; 그리고 네트 마스크는 접두사 길이를 나타내는 정수(예를 들어
24
)나 접두사 마스크를 나타내는 문자열(예를 들어255.255.255.0
)입니다.
address가 유효한 IPv4 주소가 아니면
AddressValueError
가 발생합니다. 마스크가 IPv4 주소에 유효하지 않으면NetmaskValueError
가 발생합니다.strict가
True
이고 제공된 address에 호스트 비트가 설정되면,ValueError
가 발생합니다. 그렇지 않으면, 적절한 네트워크 주소를 결정하기 위해 호스트 비트가 마스크 되어 제거됩니다.달리 명시되지 않는 한, 다른 네트워크/주소 객체를 받아들이는 모든 네트워크 메서드는 인자의 IP 버전이
self
와 호환되지 않으면TypeError
를 발생시킵니다.버전 3.5에서 변경: address 생성자 매개 변수에 대해 2-튜플 형식을 추가했습니다.
- version¶
- max_prefixlen¶
IPv4Address
의 해당 어트리뷰트 설명서를 참조하십시오.
- is_multicast¶
- is_private¶
- is_unspecified¶
- is_reserved¶
- is_loopback¶
- is_link_local¶
이 어트리뷰트들은 네트워크 주소와 브로드 캐스트 주소 모두에 대해 참이면 네트워크 전체에 대해 참입니다.
- network_address¶
네트워크의 네트워크 주소. 네트워크 주소와 접두사 길이는 네트워크를 고유하게 정의합니다.
- broadcast_address¶
네트워크의 브로드 캐스트 주소. 브로드 캐스트 주소로 전송된 패킷은 네트워크의 모든 호스트가 수신해야 합니다.
- hostmask¶
IPv4Address
객체로 제공되는 호스트 마스크.
- netmask¶
IPv4Address
객체로 제공되는 네트 마스크.
- with_prefixlen¶
- compressed¶
- exploded¶
접두사 표기법의 마스크를 갖는 네트워크의 문자열 표현.
with_prefixlen
과compressed
는 항상str(network)
와 같습니다.exploded
는 펼쳐진 형식의 네트워크 주소를 사용합니다.
- with_netmask¶
네트 마스크 표기법의 마스크를 갖는 네트워크의 문자열 표현.
- with_hostmask¶
호스트 마스크 표기법의 마스크를 갖는 네트워크의 문자열 표현.
- num_addresses¶
네트워크의 총 주소 수.
- prefixlen¶
네트워크 접두사 길이, 비트 단위.
- hosts()¶
네트워크에서 사용 가능한 호스트에 대한 이터레이터를 반환합니다. 사용 가능한 호스트는 네트워크 주소 자체와 네트워크 브로드 캐스트 주소를 제외하고, 네트워크에 속하는 IP 주소입니다. 마스크 길이가 31인 네트워크의 경우, 네트워크 주소와 네트워크 브로드 캐스트 주소도 결과에 포함됩니다. 마스크가 32인 네트워크는 단일 호스트 주소가 포함된 리스트를 반환합니다.
>>> list(ip_network('192.0.2.0/29').hosts()) [IPv4Address('192.0.2.1'), IPv4Address('192.0.2.2'), IPv4Address('192.0.2.3'), IPv4Address('192.0.2.4'), IPv4Address('192.0.2.5'), IPv4Address('192.0.2.6')] >>> list(ip_network('192.0.2.0/31').hosts()) [IPv4Address('192.0.2.0'), IPv4Address('192.0.2.1')] >>> list(ip_network('192.0.2.1/32').hosts()) [IPv4Address('192.0.2.1')]
- overlaps(other)¶
이 네트워크가 other에 부분적으로나 전체적으로 포함되어 있거나 other가 이 네트워크에 완전히 포함되면
True
.
- address_exclude(network)¶
지정된 network를 이 네트워크에서 제거하여 만들어지는 네트워크 정의를 계산합니다. 네트워크 객체의 이터레이터를 반환합니다. 이 네트워크에 network가 완전히 포함되지 않으면
ValueError
가 발생합니다.>>> n1 = ip_network('192.0.2.0/28') >>> n2 = ip_network('192.0.2.1/32') >>> list(n1.address_exclude(n2)) [IPv4Network('192.0.2.8/29'), IPv4Network('192.0.2.4/30'), IPv4Network('192.0.2.2/31'), IPv4Network('192.0.2.0/32')]
- subnets(prefixlen_diff=1, new_prefix=None)¶
인자 값에 따라, 현재 네트워크 정의를 만들기 위해 참여하는 서브 네트들. prefixlen_diff는 우리의 접두사 길이를 늘여야 하는 양입니다. new_prefix는 서브 네트의 원하는 새 접두사입니다; 우리의 접두사보다 커야 합니다. prefixlen_diff와 new_prefix 중 하나만 설정해야 합니다. 네트워크 객체의 이터레이터를 반환합니다.
>>> list(ip_network('192.0.2.0/24').subnets()) [IPv4Network('192.0.2.0/25'), IPv4Network('192.0.2.128/25')] >>> list(ip_network('192.0.2.0/24').subnets(prefixlen_diff=2)) [IPv4Network('192.0.2.0/26'), IPv4Network('192.0.2.64/26'), IPv4Network('192.0.2.128/26'), IPv4Network('192.0.2.192/26')] >>> list(ip_network('192.0.2.0/24').subnets(new_prefix=26)) [IPv4Network('192.0.2.0/26'), IPv4Network('192.0.2.64/26'), IPv4Network('192.0.2.128/26'), IPv4Network('192.0.2.192/26')] >>> list(ip_network('192.0.2.0/24').subnets(new_prefix=23)) Traceback (most recent call last): File "<stdin>", line 1, in <module> raise ValueError('new prefix must be longer') ValueError: new prefix must be longer >>> list(ip_network('192.0.2.0/24').subnets(new_prefix=25)) [IPv4Network('192.0.2.0/25'), IPv4Network('192.0.2.128/25')]
- supernet(prefixlen_diff=1, new_prefix=None)¶
인자 값에 따라, 이 네트워크 정의를 포함하는 슈퍼 네트. prefixlen_diff는 우리의 접두사 길이를 줄여야 하는 양입니다. new_prefix는 슈퍼 네트의 원하는 새 접두사입니다; 우리의 접두사보다 작아야 합니다. prefixlen_diff와 new_prefix 중 하나만 설정해야 합니다. 단일 네트워크 객체를 반환합니다.
>>> ip_network('192.0.2.0/24').supernet() IPv4Network('192.0.2.0/23') >>> ip_network('192.0.2.0/24').supernet(prefixlen_diff=2) IPv4Network('192.0.0.0/22') >>> ip_network('192.0.2.0/24').supernet(new_prefix=20) IPv4Network('192.0.0.0/20')
- subnet_of(other)¶
이 네트워크가 other의 서브 네트이면
True
를 반환합니다.>>> a = ip_network('192.168.1.0/24') >>> b = ip_network('192.168.1.128/30') >>> b.subnet_of(a) True
버전 3.7에 추가.
- supernet_of(other)¶
이 네트워크가 other의 슈퍼 네트이면
True
를 반환합니다.>>> a = ip_network('192.168.1.0/24') >>> b = ip_network('192.168.1.128/30') >>> a.supernet_of(b) True
버전 3.7에 추가.
- compare_networks(other)¶
이 네트워크를 other와 비교합니다. 이 비교에서는 네트워크 주소 만 고려됩니다; 호스트 비트는 고려하지 않습니다.
-1
,0
또는1
을 반환합니다.>>> ip_network('192.0.2.1/32').compare_networks(ip_network('192.0.2.2/32')) -1 >>> ip_network('192.0.2.1/32').compare_networks(ip_network('192.0.2.0/32')) 1 >>> ip_network('192.0.2.1/32').compare_networks(ip_network('192.0.2.1/32')) 0
버전 3.7부터 폐지됨: “<”, “==” 및 “>”와 같은 순서와 비교 알고리즘을 사용합니다.
- class ipaddress.IPv6Network(address, strict=True)¶
IPv6 네트워크 정의를 구성합니다. address는 다음 중 하나일 수 있습니다:
IP 주소와 선택적 접두사 길이로 구성되고 슬래시(
/
)로 구분된 문자열. IP 주소는 네트워크 주소이며, 접두사 길이는 단일 숫자인 접두사여야 합니다. 접두사 길이가 제공되지 않으면,/128
로 간주합니다.Note that currently expanded netmasks are not supported. That means
2001:db00::0/24
is a valid argument while2001:db00::0/ffff:ff00::
is not.128비트에 맞는 정수. 이는 네트워크 주소가 address이고 마스크가
/128
인 단일 주소 네트워크와 동등합니다.길이가 16인
bytes
객체에 채워진 정수, 빅 엔디안. 해석은 정수 address와 유사합니다.주소 기술과 네트 마스크의 2-튜플. 여기서 주소 기술은 문자열, 128비트 정수, 길이 16인 바이트열에 채워진 정수 또는 기존 IPv6Address 객체입니다; 네트 마스크는 접두사 길이를 나타내는 정수입니다.
address가 유효한 IPv6 주소가 아니면
AddressValueError
가 발생합니다. 마스크가 IPv6 주소에 유효하지 않으면NetmaskValueError
가 발생합니다.strict가
True
이고 제공된 address에 호스트 비트가 설정되면,ValueError
가 발생합니다. 그렇지 않으면, 적절한 네트워크 주소를 결정하기 위해 호스트 비트가 마스크 되어 제거됩니다.버전 3.5에서 변경: address 생성자 매개 변수에 대해 2-튜플 형식을 추가했습니다.
- version¶
- max_prefixlen¶
- is_multicast¶
- is_private¶
- is_unspecified¶
- is_reserved¶
- is_loopback¶
- is_link_local¶
- network_address¶
- broadcast_address¶
- hostmask¶
- netmask¶
- with_prefixlen¶
- compressed¶
- exploded¶
- with_netmask¶
- with_hostmask¶
- num_addresses¶
- prefixlen¶
- hosts()¶
네트워크에서 사용 가능한 호스트에 대한 이터레이터를 반환합니다. 사용 가능한 호스트는 서브 네트 라우터 애니 캐스트 주소를 제외하고 네트워크에 속하는 모든 IP 주소입니다. 마스크 길이가 127인 네트워크의 경우, 서브 네트 라우터 애니 캐스트 주소도 결과에 포함됩니다. 마스크가 128인 네트워크는 단일 호스트 주소가 포함된 리스트를 반환합니다.
- overlaps(other)¶
- address_exclude(network)¶
- subnets(prefixlen_diff=1, new_prefix=None)¶
- supernet(prefixlen_diff=1, new_prefix=None)¶
- subnet_of(other)¶
- supernet_of(other)¶
- compare_networks(other)¶
IPv4Network
의 해당 어트리뷰트 설명서를 참조하십시오.
- is_site_local¶
이 어트리뷰트는 네트워크 주소와 브로드 캐스트 주소 모두에 대해 참이면 네트워크 전체에 대해 참입니다.
연산자¶
네트워크 객체는 일부 연산자를 지원합니다. 달리 명시하지 않는 한, 연산자는 호환 가능한 객체 간에만 적용할 수 있습니다 (즉 IPv4와 IPv4, IPv6와 IPv6).
논리 연산자¶
네트워크 객체는 일반적인 논리 연산자 집합으로 비교할 수 있습니다. 네트워크 객체는 먼저 네트워크 주소로 정렬된 다음, 네트 마스크로 정렬됩니다.
이터레이션¶
네트워크에 속하는 모든 주소를 나열하기 위해 네트워크 객체를 이터레이트 할 수 있습니다. 이터레이션의 경우, 사용 불가능한 호스트를 포함하여 모든 호스트가 반환됩니다 (사용 가능한 호스트의 경우는 hosts()
메서드를 사용하십시오). 예:
>>> for addr in IPv4Network('192.0.2.0/28'):
... addr
...
IPv4Address('192.0.2.0')
IPv4Address('192.0.2.1')
IPv4Address('192.0.2.2')
IPv4Address('192.0.2.3')
IPv4Address('192.0.2.4')
IPv4Address('192.0.2.5')
IPv4Address('192.0.2.6')
IPv4Address('192.0.2.7')
IPv4Address('192.0.2.8')
IPv4Address('192.0.2.9')
IPv4Address('192.0.2.10')
IPv4Address('192.0.2.11')
IPv4Address('192.0.2.12')
IPv4Address('192.0.2.13')
IPv4Address('192.0.2.14')
IPv4Address('192.0.2.15')
주소 컨테이너로서의 네트워크¶
네트워크 객체는 주소의 컨테이너 역할을 할 수 있습니다. 몇 가지 예:
>>> IPv4Network('192.0.2.0/28')[0]
IPv4Address('192.0.2.0')
>>> IPv4Network('192.0.2.0/28')[15]
IPv4Address('192.0.2.15')
>>> IPv4Address('192.0.2.6') in IPv4Network('192.0.2.0/28')
True
>>> IPv4Address('192.0.3.6') in IPv4Network('192.0.2.0/28')
False
인터페이스 객체¶
인터페이스 객체는 해시 가능해서 딕셔너리에서 키로 사용할 수 있습니다.
- class ipaddress.IPv4Interface(address)¶
IPv4 인터페이스를 구성합니다. address의 의미는 임의의 호스트 주소가 항상 허용된다는 점을 제외하고는
IPv4Network
의 생성자와 같습니다.IPv4Interface
는IPv4Address
의 서브 클래스이기 때문에, 그 클래스의 모든 어트리뷰트를 상속합니다. 또한, 다음과 같은 어트리뷰트를 사용할 수 있습니다:- ip¶
네트워크 정보가 없는 주소 (
IPv4Address
).>>> interface = IPv4Interface('192.0.2.5/24') >>> interface.ip IPv4Address('192.0.2.5')
- network¶
이 인터페이스가 속한 네트워크 (
IPv4Network
).>>> interface = IPv4Interface('192.0.2.5/24') >>> interface.network IPv4Network('192.0.2.0/24')
- with_prefixlen¶
접두사 표기법의 마스크를 갖는 인터페이스의 문자열 표현.
>>> interface = IPv4Interface('192.0.2.5/24') >>> interface.with_prefixlen '192.0.2.5/24'
- with_netmask¶
네트워크를 네트 마스크로 사용하는 인터페이스의 문자열 표현.
>>> interface = IPv4Interface('192.0.2.5/24') >>> interface.with_netmask '192.0.2.5/255.255.255.0'
- with_hostmask¶
네트워크를 호스트 마스크로 사용하는 인터페이스의 문자열 표현.
>>> interface = IPv4Interface('192.0.2.5/24') >>> interface.with_hostmask '192.0.2.5/0.0.0.255'
- class ipaddress.IPv6Interface(address)¶
IPv6 인터페이스를 구성합니다. address의 의미는 임의의 호스트 주소가 항상 허용된다는 점을 제외하고는
IPv6Network
의 생성자와 같습니다.IPv6Interface
는IPv6Address
의 서브 클래스이기 때문에, 그 클래스의 모든 어트리뷰트를 상속합니다. 또한, 다음과 같은 어트리뷰트를 사용할 수 있습니다:- ip¶
- network¶
- with_prefixlen¶
- with_netmask¶
- with_hostmask¶
IPv4Interface
의 해당 어트리뷰트 설명서를 참조하십시오.
연산자¶
인터페이스 객체는 일부 연산자를 지원합니다. 달리 명시하지 않는 한, 연산자는 호환 가능한 객체 간에만 적용할 수 있습니다 (즉 IPv4와 IPv4, IPv6와 IPv6).
논리 연산자¶
인터페이스 객체는 일반적인 논리 연산자 집합으로 비교할 수 있습니다.
동등 비교(==
과 !=
)의 경우, 같다고 비교되려면 IP 주소와 네트워크가 같아야 합니다. 인터페이스는 주소나 네트워크 객체와 같다고 비교되지 않습니다.
순서(<
, >
등)의 경우 규칙이 다릅니다. 같은 IP 버전의 인터페이스와 주소 객체를 비교할 수 있으며, 주소 객체는 항상 인터페이스 객체보다 앞에 정렬됩니다. 두 개의 인터페이스 객체는 먼저 네트워크로 비교되고, 같으면 IP 주소로 비교됩니다.
다른 모듈 수준 함수¶
이 모듈은 다음과 같은 모듈 수준 함수도 제공합니다:
- ipaddress.v4_int_to_packed(address)¶
네트워크 (빅 엔디안) 순서로 채워진 길이 4인 바이트열로 주소를 표현합니다. address는 IPv4 IP 주소의 정수 표현입니다. 정수가 음수이거나 너무 커서 IPv4 IP 주소가 될 수 없으면
ValueError
가 발생합니다.>>> ipaddress.ip_address(3221225985) IPv4Address('192.0.2.1') >>> ipaddress.v4_int_to_packed(3221225985) b'\xc0\x00\x02\x01'
- ipaddress.v6_int_to_packed(address)¶
네트워크 (빅 엔디안) 순서로 채워진 길이 16인 바이트열로 주소를 나타냅니다. address는 IPv6 IP 주소의 정수 표현입니다. 정수가 음수이거나 너무 커서 IPv6 IP 주소가 될 수 없으면
ValueError
가 발생합니다.
- ipaddress.summarize_address_range(first, last)¶
첫 번째와 마지막 IP 주소가 주어진 요약된 네트워크 범위의 이터레이터를 반환합니다. first는 범위의 첫 번째
IPv4Address
나IPv6Address
이고 last는 범위의 마지막IPv4Address
나IPv6Address
입니다. first나 last가 IP 주소가 아니거나, 같은 버전이 아니면TypeError
가 발생합니다. last가 first보다 크지 않거나 first 주소 버전이 4나 6이 아니면ValueError
가 발생합니다.>>> [ipaddr for ipaddr in ipaddress.summarize_address_range( ... ipaddress.IPv4Address('192.0.2.0'), ... ipaddress.IPv4Address('192.0.2.130'))] [IPv4Network('192.0.2.0/25'), IPv4Network('192.0.2.128/31'), IPv4Network('192.0.2.130/32')]
- ipaddress.collapse_addresses(addresses)¶
축약된
IPv4Network
나IPv6Network
객체의 이터레이터를 반환합니다. addresses는IPv4Network
나IPv6Network
객체의 이터레이터입니다. addresses에 혼합 버전 객체가 포함되어 있으면TypeError
가 발생합니다.>>> [ipaddr for ipaddr in ... ipaddress.collapse_addresses([ipaddress.IPv4Network('192.0.2.0/25'), ... ipaddress.IPv4Network('192.0.2.128/25')])] [IPv4Network('192.0.2.0/24')]
맞춤 예외¶
클래스 생성자의 더욱 구체적인 에러 보고를 지원하기 위해, 모듈은 다음 예외를 정의합니다:
- exception ipaddress.AddressValueError(ValueError)¶
주소와 관련된 모든 값 에러.
- exception ipaddress.NetmaskValueError(ValueError)¶
네트 마스크와 관련된 모든 값 에러.