ipaddress

New in version python: 3.3

import ipaddress

net = ipaddress.ip_network('10.9.0.0/24')

for i, ip in zip(range(3), net):
    print(ip)

# '10.9.0.0'
# '10.9.0.1'
# '10.9.0.2'
net4 = ipaddress.ip_network('10.9.0.0/24')
adr4_1 = ipaddress.ip_address('10.9.0.6')
adr4_2 = ipaddress.ip_address('10.7.0.6')

adr4_1 in net4
# True

adr4_2 in net4
# False

net6 = ipaddress.ip_network('fdfd:87b5:b475:5e3e::/64')
adr6_1 = ipaddress.ip_address('fdfd:87b5:b475:5e3e:b1bc:e121:a8eb:14aa')
adr6_2 = ipaddress.ip_address('fe80::3840:c439:b25e:63b0')

adr6_1 in net6
# True

adr6_2 in net6
# False

ipaddress.ip_address('192.0.2.1') < ipaddress.ip_address('192.0.2.2')
# True

ip_address()

ipaddress.ip_address(address)

Возвращает IPv4Address(), IPv6Address(), сведения по ip адресу

addr = ipaddress.ip_address('10.16.14.17')
# IPv4Address('10.16.14.17')

int(addr)
# 168824337

ipaddress.ip_address('fdfd:87b5:b475:5e3e:b1bc:e121:a8eb:14aa')
# IPv6Address('fdfd:87b5:b475:5e3e:b1bc:e121:a8eb:14aa')

ipaddress.ip_address(3221225985)
# IPv4Address('192.0.2.1')

ipaddress.ip_address(42540766411282592856903984951653826561)
# IPv6Address('2001:db8::1')

ip_interface()

ipaddress.ip_interface(address)

Возвращает IPv4Interface(), IPv6Interface(), сведения по ip адресу

addr = ipaddress.ip_interface('10.9.0.6/24')
# IPv4Interface('10.16.14.17')

ipaddress.ip_address('fdfd:87b5:b475:5e3e:b1bc:e121:a8eb:14aa/64')
# IPv6Interface('fdfd:87b5:b475:5e3e:b1bc:e121:a8eb:14aa/64')

ip_network()

ipaddress.ip_network(address, strict=True)

Возвращает IPv4Network(), IPv6Network(), сведения по ip адресу

ipaddress.ip_network('10.9.0.0/24')
# IPv4Network('10.9.0.0/24')

ipaddress.ip_network('fdfd:87b5:b475:5e3e::/64')
# IPv6Network('fdfd:87b5:b475:5e3e::/64')

ipaddress.ip_network('192.0.2.1/24')
"""
Traceback (most recent call last):
...
ValueError: 192.0.2.1/24 has host bits set
"""

ipaddress.ip_network('192.0.2.1/24', strict=False)
# IPv4Network('192.0.2.0/24')

ipaddress.ip_network(3221225984)
# IPv4Network('192.0.2.0/32')

ipaddress.ip_network(42540766411282592856903984951653826560)
# IPv6Network('2001:db8::/128')

collapse_addresses()

ipaddress.collapse_addresses(adressess)
[
    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')]

get_mixed_type_key()

ipaddress.get_mixed_type_key(obj)

summarize_address_range()

ipaddress.summarize_address_range(first, last)
[
    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')
]
"""

v4_int_to_packed()

ipaddress.v4_int_to_packed(address)
ipaddress.v4_int_to_packed(3221225985)
# b'\xc0\x00\x02\x01'

v6_int_to_packed()

ipaddress.v6_int_to_packed(address)

IPv4Address()

class ipaddress.IPv4Address(address)

IPv4 объект

IPv4Address('192.168.0.1')
# IPv4Address('192.168.0.1')

IPv4Address(3232235521)
# IPv4Address('192.168.0.1')

IPv4Address(b'\xC0\xA8\x00\x01')
# IPv4Address('192.168.0.1')
compressed
exploded
is_global
is_loopback
is_multicast
is_private
addr.is_private
# True
is_reserved
is_unspecified
max_prefixlen
packed
reverse_pointer

New in version python: 3.5

ipaddress.ip_address("127.0.0.1").reverse_pointer
# '1.0.0.127.in-addr.arpa'
version

Версия протокола

addr.version
# 4

IPv6Address()

class ipaddress.IPv6Address
addr = IPv6Address(1)
# IPv6Address('::1')
compressed

ipaddress.ip_address(‘2001:db8::1’).compressed # ‘2001:0db8::1’

exploded

ipaddress.ip_address(‘2001:db8::1’).exploded # ‘2001:0db8:0000:0000:0000:0000:0000:0001’

ipv4_mapped
is_global

New in version python: 3.4

is_loopback
is_multicast
is_private
addr.is_private
# True
is_reserved
is_site_local
is_unspecified
max_prefixlen
packed
reverse_pointer

New in version python: 3.5

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'
sixtofour
teredo
version

Версия протокола

addr.version
# 6

IPv4Interface()

class ipaddress.IPv4Interface(address)
interface = IPv4Interface('192.0.2.1/24')
ip
IPv4Interface('192.0.2.5/24').ip
# IPv4Address('192.0.2.5')
network
IPv4Interface('192.0.2.5/24').network
# IPv4Network('192.0.2.0/24')
with_hostmask
IPv4Interface('192.0.2.5/24').with_hostmask
# '192.0.2.5/0.0.0.255'
with_netmask
IPv4Interface('192.0.2.5/24').with_netmask
# '192.0.2.5/255.255.255.0'
with_prefixlen
IPv4Interface('192.0.2.5/24').with_prefixlen
# '192.0.2.5/24'

IPv6Interface()

class ipaddress.IPv6Interface(address)
interface = IPv4Interface('2001:db8::1/96')
ip
network
interface.host
# IPv6Network('2001:db8::/96')
with_hostmask
with_netmask
with_prefixlen

IPv4Network()

class ipaddress.IPv4Network
net = IPv4Network('192.0.2.0/24')
broadcast_address
compressed
exploded
hostmask
net.hostmask
# IPv4Address('0.0.0.255')
is_loopback
is_private
is_reserved
is_unspecified
max_prefixlen
netmask
net.netmask
# IPv4Address('255.255.255.0')
network_address
num_addresses
net.num_addresses
# 256
prefixlen
version
with_hostmask
with_netmask
with_prefixlen
address_exclude(network)
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')
]
"""
hosts()
for ip in net.hosts()
    print(ip)
"""
192.0.2.1
...
192.0.2.254
"""
overlaps(other)
subnet_of(other)

New in version python: 3.7

subnets(prefixlen_diff=1, new_prefix=None)
supernet_of(other)

New in version python: 3.7

supernet(prefixlen_diff=1, new_prefix=None)

IPv6Network()

class ipaddress.IPv6Network
net = IPv6Network('2001:db8::0/96')
broadcast_address
compressed

network.compressed # ‘2001:0db8::/96’

exploded

interface.exploded # ‘2001:0db8:0000:0000:0000:0000:0000:0000/96’

hostmask
net.hostmask
# IPv6Address('::ffff:ffff)
is_loopback
is_multicast
is_private
is_reserved
is_site_local
is_unspecified
max_prefixlen
network_address
netmask
net.netmask
# IPv4Address('ffff:ffff:ffff:ffff:ffff:ffff::')
num_addresses
net.num_addresses
# 4294967296
prefixlen
version
with_hostmask
with_netmask
with_prefixlen
address_exclude(network)
hosts()
overlaps(other)
subnet_of(other)
subnets(prefixlen_diff=1, new_prefix=None)
supernet_of(other)
supernet(prefixlen_diff=1, new_prefix=None)