文章目录
原著
https://docs.python.org/3.7/howto/ipaddress.html
author: Peter Moody, Nick Coghlan
An introduction to the ipaddress module
概述
本文简单介绍了python自带的 ipaddress
模块,只涉及了模块的基础部分,更多函数介绍,还是要参考模块的手册.
创建Address/Network/Interface
ipaddress
模块是面向对象的。使用前先要创建相应对象。可以使用字符串或者整数来创建如下三种IP地址对象
注:此库支持ipv4和ipv6
1. IP地址
IP地址,或者叫主机地址,可以使用ipaddress.ip_address()
这个工厂类来创建,会根据传入的字符串自动的创建IPv4/IPv6地址:
>>> ipaddress.ip_address('192.0.2.1')
IPv4Address('192.0.2.1')
>>> ipaddress.ip_address('2001:DB8::1')
IPv6Address('2001:db8::1')
也可以使用正整数来创建地址,默认的,小于2^32认为是IPV4,大于则是IPv6地址:
>>> ipaddress.ip_address(3221225985)
IPv4Address('192.0.2.1')
>>> ipaddress.ip_address(42540766411282592856903984951653826561)
IPv6Address('2001:db8::1')
当然也可以用派生类IPv4Address/IPv6Address强制创建ipv4/ipv6地址:
>>> ipaddress.ip_address(1)
IPv4Address('0.0.0.1')
>>> ipaddress.IPv4Address(1)
IPv4Address('0.0.0.1')
>>> ipaddress.IPv6Address(1)
IPv6Address('::1')
2. 网段地址
ip/mask表示一个网段,可以使用ip_network
创建IPv4/IPv6:
>>> ipaddress.ip_network('192.0.2.0/24')
IPv4Network('192.0.2.0/24')
>>> ipaddress.ip_network('2001:db8::0/96')
IPv6Network('2001:db8::/96')
一个网段地址中,主机地址不能被设置,比如192.0.2.1/24
就不是一个有效的网段,初始化时程序会抛出一个 ValueError
异常. 可以设置参数strict=False
来自动的把主机地址置0:
>>> ipaddress.ip_network('192.0.2.1/24')