ipaddress --- IPv4/IPv6 操作庫?
源代碼: Lib/ipaddress.py
ipaddress 提供了創(chuàng)建、處理和操作 IPv4 和 IPv6 地址和網(wǎng)絡(luò)的功能。
該模塊中的函數(shù)和類可以直接處理與IP地址相關(guān)的各種任務(wù),包括檢查兩個主機是否在同一個子網(wǎng)中,遍歷某個子網(wǎng)中的所有主機,檢查一個字符串是否是一個有效的IP地址或網(wǎng)絡(luò)定義等等。
這是完整的模塊 API 參考—若要查看概述,請見 ipaddress模塊介紹.
3.3 新版功能.
方便的工廠函數(shù)?
ipaddress 模塊提供來工廠函數(shù)來方便地創(chuàng)建 IP 地址,網(wǎng)絡(luò)和接口:
-
ipaddress.ip_address(address)? 返回一個
IPv4Address或IPv6Address對象,取決于作為參數(shù)傳遞的 IP 地址。可以提供IPv4或IPv6地址,小于 2**32 的整數(shù)默認(rèn)被認(rèn)為是 IPv4。如果 address 不是有效的 IPv4 或 IPv6 地址,則會拋出ValueError。>>> 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)? 返回一個
IPv4Network或IPv6Network對象,具體取決于作為參數(shù)傳入的 IP 地址。 address 是表示 IP 網(wǎng)址的字符串或整數(shù)。 可以提供 IPv4 或 IPv6 網(wǎng)址;小于 2**32 的整數(shù)默認(rèn)被視為 IPv4。 strict 會被傳給IPv4Network或IPv6Network構(gòu)造器。 如果 address 不表示有效的 IPv4 或 IPv6 網(wǎng)址,或者網(wǎng)絡(luò)設(shè)置了 host 比特位,則會引發(fā)ValueError。>>> ipaddress.ip_network('192.168.0.0/28') IPv4Network('192.168.0.0/28')
-
ipaddress.ip_interface(address)? 返回一個
IPv4Interface或IPv6Interface對象,取決于作為參數(shù)傳遞的 IP 地址。 address 是代表 IP 地址的字符串或整數(shù)。 可以提供 IPv4 或 IPv6 地址,小于 2**32 的整數(shù)默認(rèn)認(rèn)為是 IPv4。 如果 address 不是有效的IPv4 或 IPv6 地址,則會拋出一個ValueError。
這些方便的函數(shù)的一個缺點是需要同時處理IPv4和IPv6格式,這意味著提供的錯誤信息并不精準(zhǔn),因為函數(shù)不知道是打算采用IPv4還是IPv6格式。更詳細(xì)的錯誤報告可以通過直接調(diào)用相應(yīng)版本的類構(gòu)造函數(shù)來獲得。
IP 地址?
地址對象?
IPv4Address 和 IPv6Address 對象有很多共同的屬性。一些只對IPv6 地址有意義的屬性也在 IPv4Address 對象實現(xiàn),以便更容易編寫正確處理兩種 IP 版本的代碼。地址對象是可哈希的 hashable,所以它們可以作為字典中的鍵來使用。
-
class
ipaddress.IPv4Address(address)? 構(gòu)造一個 IPv4 地址。 如果 address 不是一個有效的 IPv4 地址,會拋出
AddressValueError。以下是有效的 IPv4 地址:
以十進(jìn)制小數(shù)點表示的字符串,由四個十進(jìn)制整數(shù)組成,范圍為0--255,用點隔開(例如
192.168.0.1)。每個整數(shù)代表地址中的八位(一個字節(jié))。只有對于小于8的值,才允許使用前導(dǎo)零(因為對這種字符串的十進(jìn)制和八進(jìn)制解釋之間沒有任何歧義)。一個32位可容納的整數(shù)。
一個長度為 4 的封裝在
bytes對象中的整數(shù)(高位優(yōu)先)。
>>> 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')
-
version? 合適的版本號:IPv4為
4,IPv6為6。
-
max_prefixlen? 在該版本的地址表示中,比特數(shù)的總數(shù):IPv4為
32;IPv6為128。前綴定義了地址中的前導(dǎo)位數(shù)量,通過比較來確定一個地址是否是網(wǎng)絡(luò)的一部分。
-
compressed?
-
exploded? 以點符號分割十進(jìn)制表示的字符串。表示中不包括前導(dǎo)零。
由于IPv4沒有為八位數(shù)設(shè)為零的地址定義速記符號,這兩個屬性始終與IPv4地址的``str(addr)``相同。暴露這些屬性使得編寫能夠處理IPv4和IPv6地址的顯示代碼變得更加容易。
-
packed? 這個地址的二進(jìn)制表示——一個適當(dāng)長度的
bytes對象(最高的八位在最前)。 對于 IPv4 來說是 4 字節(jié),對于 IPv6 來說是 16 字節(jié)。
-
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'
這是可用于執(zhí)行PTR查詢的名稱,而不是已解析的主機名本身。
3.5 新版功能.
-
is_private? 如果該地址被分配至私有網(wǎng)絡(luò),返回
True。關(guān)于公共網(wǎng)絡(luò),請參見 iana-ipv4-special-registry (針對IPv4)和 iana-ipv6-special-registry (針對IPv6)。
-
is_global? 如果該地址被分配至公共網(wǎng)絡(luò),返回
True。關(guān)于公共網(wǎng)絡(luò),請參見 iana-ipv4-special-registry (針對IPv4)和 iana-ipv6-special-registry (針對IPv6)。3.4 新版功能.
-
is_reserved? 如果該地址屬于互聯(lián)網(wǎng)工程任務(wù)組(IETF)所規(guī)定的其他保留地址,返回
True。
-
class
ipaddress.IPv6Address(address)? 構(gòu)造一個 IPv6 地址。 如果 address 不是一個有效的 IPv6 地址,會拋出
AddressValueError。以下是有效的 IPv6 地址:
一個由八組四個16進(jìn)制數(shù)字組成的字符串, 每組展示為16位. 以冒號分隔. 這可以描述為 分解 (普通書寫). 此字符可以被 壓縮 (速記書寫) . 詳見:RFC:4291 . 例如,
"0000:0000:0000:0000:0000:0abc:0007:0def"可以被精簡為"::abc:7:def".適合 128 位的整數(shù).
一個打包在長度為 16 字節(jié)的大端序
bytes對象中的整數(shù)。
>>> ipaddress.IPv6Address('2001:db8::1000') IPv6Address('2001:db8::1000')
-
compressed?
地址表示的簡短形式,省略了組中的前導(dǎo)零,完全由零組成的最長的組序列被折疊成一個空組。
這也是``str(addr)``對IPv6地址返回的值。
-
exploded?
地址的長形式表示,包括所有前導(dǎo)零和完全由零組成的組。
For the following attributes, see the corresponding documentation of the
IPv4Addressclass:-
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.
-
teredo? 對于看起來是:RFC:4380`定義的Teredo地址(以``2001::/32``開頭)的地址,此屬性將返回嵌入式IP地址對``(server, client)`。 對于任何其他地址,該屬性將是``None``。
轉(zhuǎn)換字符串和整數(shù)?
與網(wǎng)絡(luò)模塊互操作像套接字模塊, 地址必須轉(zhuǎn)換為字符串或整數(shù). 這是使用 str() 和 int() 內(nèi)置函數(shù):
>>> 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
運算符?
地址對象支持一些運算符。 除非另有說明,運算符只能在兼容對象之間應(yīng)用(即IPv4與IPv4,IPv6與IPv6)。
比較運算符?
Address objects can be compared with the usual set of comparison operators. Some examples:
>>> 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
算術(shù)運算符?
整數(shù)可以被添加到地址對象或從地址對象中減去。 一些例子:
>>> 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網(wǎng)絡(luò)的定義?
IPv4Network 和 IPv6Network 對象提供了一個定義和檢查IP網(wǎng)絡(luò)定義的機制。一個網(wǎng)絡(luò)定義由一個 掩碼 和一個 網(wǎng)絡(luò)地址 組成,因此定義了一個IP地址的范圍,當(dāng)用掩碼屏蔽(二進(jìn)制AND)時,等于網(wǎng)絡(luò)地址。 例如,一個帶有掩碼``255.255.255.0``和網(wǎng)絡(luò)地址``192.168.1.0``的網(wǎng)絡(luò)定義由包括``192.168.1.0``到``192.168.1.255``的IP地址組成。
前綴、網(wǎng)絡(luò)掩碼和主機掩碼?
有幾種相等的方法來指定IP網(wǎng)絡(luò)掩碼。 前綴 /<nbits>``是一個符號,表示在網(wǎng)絡(luò)掩碼中設(shè)置了多少個高階位。 一個 *網(wǎng)絡(luò)掩碼* 是一個設(shè)置了一定數(shù)量高階位的IP地址。 因此,前綴/24``等同于IPv4中的網(wǎng)絡(luò)掩碼``255.255.255.0``或IPv6中的網(wǎng)絡(luò)掩碼``ffff:ff00::。 此外,*主機掩碼* 是 *網(wǎng)絡(luò)掩碼* 的邏輯取反,有時被用來表示網(wǎng)絡(luò)掩碼(例如在Cisco訪問控制列表中)。 在IPv4中,相當(dāng)于主機掩碼``0.0.0.255``的是/24`` 。
網(wǎng)絡(luò)對象?
所有由地址對象實現(xiàn)的屬性也由網(wǎng)絡(luò)對象實現(xiàn)。 此外,網(wǎng)絡(luò)對象還實現(xiàn)了額外的屬性。所有這些在 IPv4Network 和 IPv6Network 之間是共同的,所以為了避免重復(fù),它們只在 IPv4Network 中記錄。網(wǎng)絡(luò)對象是 hashable,所以它們可以作為字典中的鍵使用。
-
class
ipaddress.IPv4Network(address, strict=True)? 構(gòu)建一個 IPv4 網(wǎng)絡(luò)定義。 address 可以是以下之一:
一個由 IP 地址和可選掩碼組成的字符串,用斜線 (
/) 分開。 IP 地址是網(wǎng)絡(luò)地址,掩碼可以是一個單一的數(shù)字,這意味著它是一個 前綴,或者是一個 IPv4 地址的字符串表示。 如果是后者,如果掩碼以非零字段開始,則被解釋為 網(wǎng)絡(luò)掩碼,如果以零字段開始,則被解釋為 主機掩碼,唯一的例外是全零的掩碼被視為 網(wǎng)絡(luò)掩碼。 如果沒有提供掩碼,它就被認(rèn)為是/32。例如,以下的*地址*描述是等同的:
192.168.1.0/24,192.168.1.0/255.255.255.0``和``192.168.1.0/0.0.0.255一個可轉(zhuǎn)化為32位的整數(shù)。 這相當(dāng)于一個單地址的網(wǎng)絡(luò),網(wǎng)絡(luò)地址是*address*,掩碼是``/32``。
一個整數(shù)被打包成一個長度為 4 的大端序
bytes對象。 其解釋類似于一個整數(shù) address。一個地址描述和一個網(wǎng)絡(luò)掩碼的雙元組,其中地址描述是一個字符串,一個 32 位的整數(shù),一個 4 字節(jié)的打包整數(shù),或一個現(xiàn)有的 IPv4Address 對象;而網(wǎng)絡(luò)掩碼是一個代表前綴長度的整數(shù) (例如
24) 或一個代表前綴掩碼的字符串 (例如255.255.255.0)。
如果 address 不是一個有效的 IPv4 地址則會引發(fā)
AddressValueError。 如果掩碼不是有效的 IPv4 地址則會引發(fā)NetmaskValueError。如果 strict 是
True,并且在提供的地址中設(shè)置了主機位,那么ValueError將被觸發(fā)。 否則,主機位將被屏蔽掉,以確定適當(dāng)?shù)木W(wǎng)絡(luò)地址。除非另有說明,如果參數(shù)的 IP 版本與
self不兼容,所有接受其他網(wǎng)絡(luò)/地址對象的網(wǎng)絡(luò)方法都將引發(fā)TypeError。在 3.5 版更改: 為*address*構(gòu)造函數(shù)參數(shù)添加了雙元組形式。
-
version?
-
max_prefixlen? 請參考
IPv4Address中的相應(yīng)屬性文檔。
-
is_multicast?
-
is_private?
-
is_unspecified?
-
is_reserved?
-
is_loopback?
-
is_link_local? 如果這些屬性對網(wǎng)絡(luò)地址和廣播地址都是真實的,那么它們對整個網(wǎng)絡(luò)來說就是真實的。
-
network_address? 網(wǎng)絡(luò)的網(wǎng)絡(luò)地址。網(wǎng)絡(luò)地址和前綴長度一起唯一地定義了一個網(wǎng)絡(luò)。
-
broadcast_address? 網(wǎng)絡(luò)的廣播地址。發(fā)送到廣播地址的數(shù)據(jù)包應(yīng)該被網(wǎng)絡(luò)上的每臺主機所接收。
-
hostmask? 主機掩碼,作為一個
IPv4Address對象。
-
netmask? 網(wǎng)絡(luò)掩碼,作為一個
IPv4Address對象。
-
with_prefixlen?
-
compressed?
-
exploded? 網(wǎng)絡(luò)的字符串表示,其中掩碼為前綴符號。
with_prefixlen和compressed總是與str(network)相同,exploded使用分解形式的網(wǎng)絡(luò)地址。
-
with_netmask? 網(wǎng)絡(luò)的字符串表示,掩碼用net mask符號表示。
-
with_hostmask? 網(wǎng)絡(luò)的字符串表示,其中的掩碼為主機掩碼符號。
-
num_addresses? 網(wǎng)絡(luò)中的地址總數(shù)。
-
prefixlen? 網(wǎng)絡(luò)前綴的長度,以比特為單位。
-
hosts()? Returns an iterator over the usable hosts in the network. The usable hosts are all the IP addresses that belong to the network, except the network address itself and the network broadcast address. For networks with a mask length of 31, the network address and network broadcast address are also included in the result.
>>> 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')]
-
overlaps(other)? 如果這個網(wǎng)絡(luò)部分或全部包含在*other*中,或者*other*全部包含在這個網(wǎng)絡(luò)中,則為``True``。
-
address_exclude(network)? 計算從這個網(wǎng)絡(luò)中移除給定的 network 后產(chǎn)生的網(wǎng)絡(luò)定義。 返回一個網(wǎng)絡(luò)對象的迭代器。 如果 network 不完全包含在這個網(wǎng)絡(luò)中則會引發(fā)
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)? 根據(jù)參數(shù)值,加入的子網(wǎng)構(gòu)成當(dāng)前的網(wǎng)絡(luò)定義。 prefixlen_diff 是我們的前綴長度應(yīng)該增加的數(shù)量。 new_prefix 是所需的子網(wǎng)的新前綴;它必須大于我們的前綴。 必須設(shè)置 prefixlen_diff 和 new_prefix 中的一個,且只有一個。 返回一個網(wǎng)絡(luò)對象的迭代器。
>>> 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)? 包含這個網(wǎng)絡(luò)定義的超級網(wǎng),取決于參數(shù)值。 prefixlen_diff 是我們的前綴長度應(yīng)該減少的數(shù)量。 new_prefix 是超級網(wǎng)的新前綴;它必須比我們的前綴小。 必須設(shè)置 prefixlen_diff 和 new_prefix 中的一個,而且只有一個。 返回一個單一的網(wǎng)絡(luò)對象。
>>> 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)? 如果這個網(wǎng)絡(luò)是*other*的子網(wǎng),則返回``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)? 如果這個網(wǎng)絡(luò)是*other*的超網(wǎng),則返回``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)? 將這個網(wǎng)絡(luò)與*ohter*網(wǎng)絡(luò)進(jìn)行比較。 在這個比較中,只考慮網(wǎng)絡(luò)地址;不考慮主機位。 返回是``-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)? 構(gòu)建一個 IPv6 網(wǎng)絡(luò)定義。 address 可以是以下之一:
一個由IP地址和可選前綴長度組成的字符串,用斜線(
/)分開。 IP地址是網(wǎng)絡(luò)地址,前綴長度必須是一個數(shù)字,即*prefix*。 如果沒有提供前綴長度,就認(rèn)為是``/128``。請注意,目前不支持?jǐn)U展的網(wǎng)絡(luò)掩碼。 這意味著
2001:db00::0/24是一個有效的參數(shù),而2001:db00::0/ffff:ff00::不是。一個適合128位的整數(shù)。 這相當(dāng)于一個單地址網(wǎng)絡(luò),網(wǎng)絡(luò)地址是*address*,掩碼是``/128``。
一個整數(shù)被打包成一個長度為 16 的大端序
bytes對象。 其解釋類似于一個整數(shù)的 address。一個地址描述和一個網(wǎng)絡(luò)掩碼的雙元組,其中地址描述是一個字符串,一個 128 位的整數(shù),一個 16 字節(jié)的打包整數(shù),或者一個現(xiàn)有的 IPv6Address 對象;而網(wǎng)絡(luò)掩碼是一個代表前綴長度的整數(shù)。
如果 address 不是一個有效的 IPv6 地址則會引發(fā)
AddressValueError。 如果掩碼對 IPv6 地址無效則會引發(fā)NetmaskValueError。如果 strict 是
True,并且在提供的地址中設(shè)置了主機位,那么ValueError將被觸發(fā)。 否則,主機位將被屏蔽掉,以確定適當(dāng)?shù)木W(wǎng)絡(luò)地址。在 3.5 版更改: 為*address*構(gòu)造函數(shù)參數(shù)添加了雙元組形式。
-
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()? Returns an iterator over the usable hosts in the network. The usable hosts are all the IP addresses that belong to the network, except the Subnet-Router anycast address. For networks with a mask length of 127, the Subnet-Router anycast address is also included in the result.
-
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中的相應(yīng)屬性文檔。
-
is_site_local? 如果這些屬性對網(wǎng)絡(luò)地址和廣播地址都是真的,那么對整個網(wǎng)絡(luò)來說就是真的。
運算符?
網(wǎng)絡(luò)對象支持一些操作符。 除非另有說明,操作符只能在兼容的對象之間應(yīng)用(例如,IPv4與IPv4,IPv6與IPv6)。
邏輯操作符?
網(wǎng)絡(luò)對象可以用常規(guī)的邏輯運算符集進(jìn)行比較。網(wǎng)絡(luò)對象首先按網(wǎng)絡(luò)地址排序,然后按網(wǎng)絡(luò)掩碼排序。
迭代?
網(wǎng)絡(luò)對象可以被迭代,以列出屬于該網(wǎng)絡(luò)的所有地址。 對于迭代,所有 主機都會被返回,包括不可用的主機(對于可用的主機,使用 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')
作為地址容器的網(wǎng)絡(luò)?
網(wǎng)絡(luò)對象可以作為地址的容器。 一些例子:
>>> 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
接口對象?
接口對象是 hashable 的,所以它們可以作為字典中的鍵使用。
-
class
ipaddress.IPv4Interface(address)? 構(gòu)建一個 IPv4 接口。 address 的含義與
IPv4Network構(gòu)造器中的一樣,不同之處在于任意主機地址總是會被接受。IPv4Interface是IPv4Address的一個子類,所以它繼承了該類的所有屬性。 此外,還有以下屬性可用:-
ip? 地址(
IPv4Address)沒有網(wǎng)絡(luò)信息。>>> interface = IPv4Interface('192.0.2.5/24') >>> interface.ip IPv4Address('192.0.2.5')
-
network? 該接口所屬的網(wǎng)絡(luò)(
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? 以網(wǎng)絡(luò)為掩碼的接口的字符串表示。
>>> 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)? 構(gòu)建一個 IPv6 接口。 address 的含義與
IPv6Network構(gòu)造器中的一樣,不同之處在于任意主機地址總是會被接受。IPv6Interface是IPv6Address的一個子類,所以它繼承了該類的所有屬性。 此外,還有以下屬性可用:-
ip?
-
network?
-
with_prefixlen?
-
with_netmask?
-
with_hostmask? 請參考
IPv4Interface中的相應(yīng)屬性文檔。
-
運算符?
接口對象支持一些運算符。 除非另有說明,運算符只能在兼容的對象之間應(yīng)用(即IPv4與IPv4,IPv6與IPv6)。
邏輯操作符?
接口對象可以用通常的邏輯運算符集進(jìn)行比較。
對于相等比較(==``和!=``),IP地址和網(wǎng)絡(luò)都必須是相同的對象才會相等。 一個接口不會與任何地址或網(wǎng)絡(luò)對象相等。
對于排序 (<、> 等),規(guī)則是不同的。 具有相同 IP 版本的接口和地址對象可以被比較,而地址對象總是在接口對象之前排序。 兩個接口對象首先通過它們的網(wǎng)絡(luò)進(jìn)行比較,如果它們是相同的,則通過它們的 IP 地址進(jìn)行比較。
其他模塊級別函數(shù)?
該模塊還提供以下模塊級函數(shù):
-
ipaddress.v4_int_to_packed(address)? 以網(wǎng)絡(luò)(大端序)順序?qū)⒁粋€地址表示為 4 個打包的字節(jié)。address 是一個 IPv4 IP 地址的整數(shù)表示。 如果整數(shù)是負(fù)數(shù)或太大而不滿足 IPv4 IP 地址要求,會觸發(fā)一個
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)? 以網(wǎng)絡(luò)(大端序)順序?qū)⒁粋€地址表示為 4 個打包的字節(jié)。address 是一個IPv6 IP地址的整數(shù)表示。 如果整數(shù)是負(fù)數(shù)或太大而不滿足 IPv6 IP 地址要求,會觸發(fā)一個
ValueError。
-
ipaddress.summarize_address_range(first, last)? 給出第一個和最后一個 IP 地址,返回總結(jié)的網(wǎng)絡(luò)范圍的迭代器。 first 是范圍內(nèi)的第一個
IPv4Address或IPv6Address,last 是范圍內(nèi)的最后一個IPv4Address或IPv6Address。 如果 first 或 last 不是IP地址或不是同一版本則會引發(fā)TypeError。 如果 last 不大于 first,或者 first 的地址版本不是 4 或 6 則會引發(fā)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 包含混合版本的對象則會引發(fā)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')]
-
ipaddress.get_mixed_type_key(obj)? 返回一個適合在網(wǎng)絡(luò)和地址之間進(jìn)行排序的鍵。 地址和網(wǎng)絡(luò)對象在默認(rèn)情況下是不可排序的;它們在本質(zhì)上是不同的,所以表達(dá)式:
IPv4Address('192.0.2.0') <= IPv4Network('192.0.2.0/24')
是沒有意義的。 然而,有些時候,你可能希望讓
ipaddress對這些進(jìn)行排序。 如果你需要這樣做,你可以使用這個函數(shù)作為sorted()的 key 參數(shù)。obj 是一個網(wǎng)絡(luò)或地址對象。
