新聞中心
ipaddress —- IPv4/IPv6 操作庫
源代碼: Lib/ipaddress.py

創(chuàng)新互聯(lián)公司專業(yè)為企業(yè)提供龍文網(wǎng)站建設(shè)、龍文做網(wǎng)站、龍文網(wǎng)站設(shè)計(jì)、龍文網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計(jì)與制作、龍文企業(yè)網(wǎng)站模板建站服務(wù),10年龍文做網(wǎng)站經(jīng)驗(yàn),不只是建網(wǎng)站,更提供有價(jià)值的思路和整體網(wǎng)絡(luò)服務(wù)。
ipaddress 提供了創(chuàng)建、處理和操作 IPv4 和 IPv6 地址和網(wǎng)絡(luò)的功能。
該模塊中的函數(shù)和類可以直接處理與IP地址相關(guān)的各種任務(wù),包括檢查兩個(gè)主機(jī)是否在同一個(gè)子網(wǎng)中,遍歷某個(gè)子網(wǎng)中的所有主機(jī),檢查一個(gè)字符串是否是一個(gè)有效的IP地址或網(wǎng)絡(luò)定義等等。
這是完整的模塊 API 參考—若要查看概述,請(qǐng)見 ipaddress模塊介紹.
3.3 新版功能.
方便的工廠函數(shù)
ipaddress 模塊提供來工廠函數(shù)來方便地創(chuàng)建 IP 地址,網(wǎng)絡(luò)和接口:
ipaddress.ip_address(address)
返回一個(gè) IPv4Address 或 IPv6Address 對(duì)象,取決于作為參數(shù)傳遞的 IP 地址??梢蕴峁㊣Pv4或IPv6地址,小于 2**32 的整數(shù)默認(rèn)被認(rèn)為是 IPv4。如果 address 不是有效的 IPv4 或 IPv6 地址,則會(huì)拋出 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)
返回一個(gè) IPv4Network 或 IPv6Network 對(duì)象,具體取決于作為參數(shù)傳入的 IP 地址。 address 是表示 IP 網(wǎng)址的字符串或整數(shù)。 可以提供 IPv4 或 IPv6 網(wǎng)址;小于 2**32 的整數(shù)默認(rèn)被視為 IPv4。 strict 會(huì)被傳給 IPv4Network 或 IPv6Network 構(gòu)造器。 如果 address 不表示有效的 IPv4 或 IPv6 網(wǎng)址,或者網(wǎng)絡(luò)設(shè)置了 host 比特位,則會(huì)引發(fā) ValueError。
>>> ipaddress.ip_network('192.168.0.0/28')IPv4Network('192.168.0.0/28')
ipaddress.ip_interface(address)
返回一個(gè) IPv4Interface 或 IPv6Interface 對(duì)象,取決于作為參數(shù)傳遞的 IP 地址。 address 是代表 IP 地址的字符串或整數(shù)。 可以提供 IPv4 或 IPv6 地址,小于 2**32 的整數(shù)默認(rèn)認(rèn)為是 IPv4。 如果 address 不是有效的IPv4 或 IPv6 地址,則會(huì)拋出一個(gè) ValueError。
這些方便的函數(shù)的一個(gè)缺點(diǎn)是需要同時(shí)處理IPv4和IPv6格式,這意味著提供的錯(cuò)誤信息并不精準(zhǔn),因?yàn)楹瘮?shù)不知道是打算采用IPv4還是IPv6格式。更詳細(xì)的錯(cuò)誤報(bào)告可以通過直接調(diào)用相應(yīng)版本的類構(gòu)造函數(shù)來獲得。
IP 地址
地址對(duì)象
IPv4Address 和 IPv6Address 對(duì)象有很多共同的屬性。一些只對(duì)IPv6 地址有意義的屬性也在 IPv4Address 對(duì)象實(shí)現(xiàn),以便更容易編寫正確處理兩種 IP 版本的代碼。地址對(duì)象是可哈希的 hashable,所以它們可以作為字典中的鍵來使用。
class ipaddress.IPv4Address(address)
構(gòu)造一個(gè) IPv4 地址。 如果 address 不是一個(gè)有效的 IPv4 地址,會(huì)拋出 AddressValueError 。
以下是有效的 IPv4 地址:
-
以十進(jìn)制小數(shù)點(diǎn)表示的字符串,由四個(gè)十進(jìn)制整數(shù)組成,范圍為0—255,用點(diǎn)隔開(例如
192.168.0.1)。每個(gè)整數(shù)代表地址中的八位(一個(gè)字節(jié))。不允許使用前導(dǎo)零,以免與八進(jìn)制表示產(chǎn)生歧義。 -
一個(gè)32位可容納的整數(shù)。
-
一個(gè)長度為 4 的封裝在 bytes 對(duì)象中的整數(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')
在 3.8 版更改: 前導(dǎo)零可被接受,即使是在可能與八進(jìn)制表示混淆的情況下也會(huì)被接受。
在 3.10 版更改: 前導(dǎo)零不再被接受,并且會(huì)被視作錯(cuò)誤。IPv4地址字符串現(xiàn)在嚴(yán)格按照glibc的 inet_pton() 函數(shù)進(jìn)行解析。
在 3.9.5 版更改: 上述變更也在自3.9.5版本起的python 3.9當(dāng)中被包含。
在 3.8.12 版更改: 從3.8.12版本開始,Python 3.8中也包含了上述變化。
-
version
合適的版本號(hào):IPv4為
4,IPv6為6。 -
max_prefixlen
在該版本的地址表示中,比特?cái)?shù)的總數(shù):IPv4為
32;IPv6為128。前綴定義了地址中的前導(dǎo)位數(shù)量,通過比較來確定一個(gè)地址是否是網(wǎng)絡(luò)的一部分。
-
compressed
-
exploded
以點(diǎn)符號(hào)分割十進(jìn)制表示的字符串。表示中不包括前導(dǎo)零。
由于IPv4沒有為八位數(shù)設(shè)為零的地址定義速記符號(hào),這兩個(gè)屬性始終與IPv4地址的``str(addr)``相同。暴露這些屬性使得編寫能夠處理IPv4和IPv6地址的顯示代碼變得更加容易。
-
packed
這個(gè)地址的二進(jìn)制表示——一個(gè)適當(dāng)長度的 bytes 對(duì)象(最高的八位在最前)。 對(duì)于 IPv4 來說是 4 字節(jié),對(duì)于 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查詢的名稱,而不是已解析的主機(jī)名本身。
3.5 新版功能.
-
is_multicast
如果該地址被保留用作多播用途,返回
True。關(guān)于多播地址,請(qǐng)參見 RFC 3171 (IPv4)和 RFC 2373 (IPv6)。 -
is_private
如果該地址被分配至私有網(wǎng)絡(luò),返回
True。關(guān)于公共網(wǎng)絡(luò),請(qǐng)參見 iana-ipv4-special-registry (針對(duì)IPv4)和 iana-ipv6-special-registry (針對(duì)IPv6)。 -
is_global
如果該地址被分配至公共網(wǎng)絡(luò),返回
True。關(guān)于公共網(wǎng)絡(luò),請(qǐng)參見 iana-ipv4-special-registry (針對(duì)IPv4)和 iana-ipv6-special-registry (針對(duì)IPv6)。3.4 新版功能.
-
is_unspecified
當(dāng)?shù)刂肺粗付〞r(shí)為``True`` 。 參見 RFC 5735 (IPv4) 或 RFC 2373 (IPv6).
-
is_reserved
如果該地址屬于互聯(lián)網(wǎng)工程任務(wù)組(IETF)所規(guī)定的其他保留地址,返回
True。 -
is_loopback
如果該地址為一個(gè)回環(huán)地址,返回
True。關(guān)于回環(huán)地址,請(qǐng)見 RFC 3330 (IPv4)和 RFC 2373 (IPv6)。 -
is_link_local
如果該地址被保留用于本地鏈接則為
True。 參見 RFC 3927。
IPv4Address.__format__(fmt)
返回一個(gè)IP地址的字符串表示,由一個(gè)明確的格式字符串控制。fmt 可以是以下之一: 's',默認(rèn)選項(xiàng),相當(dāng)于 str(),'b' 用于零填充的二進(jìn)制字符串,'X' 或者 'x' 用于大寫或小寫的十六進(jìn)制表示,或者 'n' 相當(dāng)于 'b' 用于 IPv4 地址和 'x' 用于 IPv6 地址。 對(duì)于二進(jìn)制和十六進(jìn)制表示法,可以使用形式指定器 '#' 和分組選項(xiàng) '_'。 __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)
構(gòu)造一個(gè) IPv6 地址。 如果 address 不是一個(gè)有效的 IPv6 地址,會(huì)拋出 AddressValueError 。
以下是有效的 IPv6 地址:
-
一個(gè)由八組四個(gè)16進(jìn)制數(shù)字組成的字符串, 每組展示為16位. 以冒號(hào)分隔. 這可以描述為 分解 (普通書寫). 此字符可以被 壓縮 (速記書寫) . 詳見:RFC:4291 . 例如,
"0000:0000:0000:0000:0000:0abc:0007:0def"可以被精簡為"::abc:7:def".可選擇的是,該字符串也可以有一個(gè)作用域ID,用后綴``%scope_id``表示。如果存在,作用域ID必須是非空的,并且不能包含``%``。詳見:RFC:4007。例如,
fe80::1234%1``可以識(shí)別節(jié)點(diǎn)第一條鏈路上的地址``fe80::1234 -
適合 128 位的整數(shù).
-
一個(gè)打包在長度為 16 字節(jié)的大端序 bytes 對(duì)象中的整數(shù)。
>>> ipaddress.IPv6Address('2001:db8::1000')IPv6Address('2001:db8::1000')>>> ipaddress.IPv6Address('ff02::5678%1')IPv6Address('ff02::5678%1')
- compressed
地址表示的簡短形式,省略了組中的前導(dǎo)零,完全由零組成的最長的組序列被折疊成一個(gè)空組。
這也是``str(addr)``對(duì)IPv6地址返回的值。
- exploded
地址的長形式表示,包括所有前導(dǎo)零和完全由零組成的組。
關(guān)于以下屬性和方法,請(qǐng)參見 IPv4Address 類的相應(yīng)文檔。
-
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
如果地址被保留用于本地站點(diǎn)則為
True。 請(qǐng)注意本地站點(diǎn)地址空間已被 RFC 3879 棄用。 請(qǐng)使用 is_private 來檢測(cè)此地址是否位于 RFC 4193 所定義的本地唯一地址空間中。 -
ipv4_mapped
地址為映射的IPv4地址 (起始為
::FFFF/96), 此屬性記錄為嵌入IPv4地址. 其他的任何地址, 此屬性為None. -
scope_id
對(duì)于:RFC:4007`定義的作用域地址,此屬性以字符串的形式確定地址所屬的作用域的特定區(qū)域。當(dāng)沒有指定作用域時(shí),該屬性將是``None`。
-
sixtofour
對(duì)于看起來是6to4的地址(以``2002::/16``開頭),如 RFC 3056 所定義的,此屬性將返回嵌入的IPv4地址。 對(duì)于任何其他地址,該屬性將是``None``。
-
teredo
對(duì)于看起來是:RFC:4380`定義的Teredo地址(以``2001::/32``開頭)的地址,此屬性將返回嵌入式IP地址對(duì)``(server, client)`。 對(duì)于任何其他地址,該屬性將是``None``。
IPv6Address.__format__(fmt)
請(qǐng)參考 IPv4Address 中對(duì)應(yīng)的方法文檔。
3.9 新版功能.
轉(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
請(qǐng)注意,IPv6范圍內(nèi)的地址被轉(zhuǎn)換為沒有范圍區(qū)域ID的整數(shù)。
運(yùn)算符
地址對(duì)象支持一些運(yùn)算符。 除非另有說明,運(yùn)算符只能在兼容對(duì)象之間應(yīng)用(即IPv4與IPv4,IPv6與IPv6)。
比較運(yùn)算符
地址對(duì)象可以用通常的一組比較運(yùn)算符進(jìn)行比較。具有不同范圍區(qū)域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
算術(shù)運(yùn)算符
整數(shù)可以被添加到地址對(duì)象或從地址對(duì)象中減去。 一些例子:
>>> IPv4Address('127.0.0.2') + 3IPv4Address('127.0.0.5')>>> IPv4Address('127.0.0.2') - 3IPv4Address('126.255.255.255')>>> IPv4Address('255.255.255.255') + 1Traceback (most recent call last):File "", line 1, in ipaddress.AddressValueError: 4294967296 (>= 2**32) is not permitted as an IPv4 address
IP網(wǎng)絡(luò)的定義
IPv4Network 和 IPv6Network 對(duì)象提供了一個(gè)定義和檢查IP網(wǎng)絡(luò)定義的機(jī)制。一個(gè)網(wǎng)絡(luò)定義由一個(gè) 掩碼 和一個(gè) 網(wǎng)絡(luò)地址 組成,因此定義了一個(gè)IP地址的范圍,當(dāng)用掩碼屏蔽(二進(jìn)制AND)時(shí),等于網(wǎng)絡(luò)地址。 例如,一個(gè)帶有掩碼``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ò)掩碼和主機(jī)掩碼
有幾種相等的方法來指定IP網(wǎng)絡(luò)掩碼。 前綴 //24``等同于IPv4中的網(wǎng)絡(luò)掩碼``255.255.255.0``或IPv6中的網(wǎng)絡(luò)掩碼``ffff:ff00::。 此外,*主機(jī)掩碼* 是 *網(wǎng)絡(luò)掩碼* 的邏輯取反,有時(shí)被用來表示網(wǎng)絡(luò)掩碼(例如在Cisco訪問控制列表中)。 在IPv4中,相當(dāng)于主機(jī)掩碼``0.0.0.255``的是/24`` 。
網(wǎng)絡(luò)對(duì)象
所有由地址對(duì)象實(shí)現(xiàn)的屬性也由網(wǎng)絡(luò)對(duì)象實(shí)現(xiàn)。 此外,網(wǎng)絡(luò)對(duì)象還實(shí)現(xiàn)了額外的屬性。所有這些在 IPv4Network 和 IPv6Network 之間是共同的,所以為了避免重復(fù),它們只在 IPv4Network 中記錄。網(wǎng)絡(luò)對(duì)象是 hashable,所以它們可以作為字典中的鍵使用。
class ipaddress.IPv4Network(address, strict=True)
構(gòu)建一個(gè) IPv4 網(wǎng)絡(luò)定義。 address 可以是以下之一:
-
一個(gè)由 IP 地址和可選掩碼組成的字符串,用斜線 (
/) 分開。 IP 地址是網(wǎng)絡(luò)地址,掩碼可以是一個(gè)單一的數(shù)字,這意味著它是一個(gè) 前綴,或者是一個(gè) IPv4 地址的字符串表示。 如果是后者,如果掩碼以非零字段開始,則被解釋為 網(wǎng)絡(luò)掩碼,如果以零字段開始,則被解釋為 主機(jī)掩碼,唯一的例外是全零的掩碼被視為 網(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 -
一個(gè)可轉(zhuǎn)化為32位的整數(shù)。 這相當(dāng)于一個(gè)單地址的網(wǎng)絡(luò),網(wǎng)絡(luò)地址是*address*,掩碼是``/32``。
-
一個(gè)整數(shù)被打包成一個(gè)長度為 4 的大端序 bytes 對(duì)象。 其解釋類似于一個(gè)整數(shù) address。
-
一個(gè)地址描述和一個(gè)網(wǎng)絡(luò)掩碼的雙元組,其中地址描述是一個(gè)字符串,一個(gè) 32 位的整數(shù),一個(gè) 4 字節(jié)的打包整數(shù),或一個(gè)現(xiàn)有的 IPv4Address 對(duì)象;而網(wǎng)絡(luò)掩碼是一個(gè)代表前綴長度的整數(shù) (例如
24) 或一個(gè)代表前綴掩碼的字符串 (例如255.255.255.0)。
如果 address 不是一個(gè)有效的 IPv4 地址則會(huì)引發(fā) AddressValueError。 如果掩碼不是有效的 IPv4 地址則會(huì)引發(fā) NetmaskValueError。
如果 strict 是 True,并且在提供的地址中設(shè)置了主機(jī)位,那么 ValueError 將被觸發(fā)。 否則,主機(jī)位將被屏蔽掉,以確定適當(dāng)?shù)木W(wǎng)絡(luò)地址。
除非另有說明,如果參數(shù)的 IP 版本與 self 不兼容,所有接受其他網(wǎng)絡(luò)/地址對(duì)象的網(wǎng)絡(luò)方法都將引發(fā) TypeError。
在 3.5 版更改: 為*address*構(gòu)造函數(shù)參數(shù)添加了雙元組形式。
-
version
-
max_prefixlen
請(qǐng)參考 IPv4Address 中的相應(yīng)屬性文檔。
-
is_multicast
-
is_private
-
is_unspecified
-
is_reserved
-
is_loopback
-
is_link_local
如果這些屬性對(duì)網(wǎng)絡(luò)地址和廣播地址都是True,那么它們對(duì)整個(gè)網(wǎng)絡(luò)來說就是True。
-
network_address
網(wǎng)絡(luò)的網(wǎng)絡(luò)地址。網(wǎng)絡(luò)地址和前綴長度一起唯一地定義了一個(gè)網(wǎng)絡(luò)。
-
broadcast_address
網(wǎng)絡(luò)的廣播地址。發(fā)送到廣播地址的數(shù)據(jù)包應(yīng)該被網(wǎng)絡(luò)上的每臺(tái)主機(jī)所接收。
-
hostmask
主機(jī)掩碼,作為一個(gè) IPv4Address 對(duì)象。
-
netmask
網(wǎng)絡(luò)掩碼,作為一個(gè) IPv4Address 對(duì)象。
-
with_prefixlen
-
compressed
-
exploded
網(wǎng)絡(luò)的字符串表示,其中掩碼為前綴符號(hào)。
with_prefixlen和compressed總是與str(network)相同,exploded使用分解形式的網(wǎng)絡(luò)地址。 -
with_netmask
網(wǎng)絡(luò)的字符串表示,掩碼用網(wǎng)絡(luò)掩碼符號(hào)表示。
-
with_hostmask
網(wǎng)絡(luò)的字符串表示,其中的掩碼為主機(jī)掩碼符號(hào)。
-
num_addresses
網(wǎng)絡(luò)中的地址總數(shù)。
-
prefixlen
網(wǎng)絡(luò)前綴的長度,以比特為單位。
-
hosts()
返回一個(gè)網(wǎng)絡(luò)中可用主機(jī)的迭代器。 可用的主機(jī)是屬于該網(wǎng)絡(luò)的所有IP地址,除了網(wǎng)絡(luò)地址本身和網(wǎng)絡(luò)廣播地址。 對(duì)于掩碼長度為31的網(wǎng)絡(luò),網(wǎng)絡(luò)地址和網(wǎng)絡(luò)廣播地址也包括在結(jié)果中。掩碼為32的網(wǎng)絡(luò)將返回一個(gè)包含單一主機(jī)地址的列表。
>>> 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)
如果這個(gè)網(wǎng)絡(luò)部分或全部包含在*other*中,或者*other*全部包含在這個(gè)網(wǎng)絡(luò)中,則為``True``。
-
address_exclude(network)
計(jì)算從這個(gè)網(wǎng)絡(luò)中移除給定的 network 后產(chǎn)生的網(wǎng)絡(luò)定義。 返回一個(gè)網(wǎng)絡(luò)對(duì)象的迭代器。 如果 network 不完全包含在這個(gè)網(wǎng)絡(luò)中則會(huì)引發(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 中的一個(gè),且只有一個(gè)。 返回一個(gè)網(wǎng)絡(luò)對(duì)象的迭代器。
>>> 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 "", line 1, in 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)
包含這個(gè)網(wǎng)絡(luò)定義的超級(jí)網(wǎng),取決于參數(shù)值。 prefixlen_diff 是我們的前綴長度應(yīng)該減少的數(shù)量。 new_prefix 是超級(jí)網(wǎng)的新前綴;它必須比我們的前綴小。 必須設(shè)置 prefixlen_diff 和 new_prefix 中的一個(gè),而且只有一個(gè)。 返回一個(gè)單一的網(wǎng)絡(luò)對(duì)象。
>>> 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)
如果這個(gè)網(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)
如果這個(gè)網(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)
將這個(gè)網(wǎng)絡(luò)與*ohter*網(wǎng)絡(luò)進(jìn)行比較。 在這個(gè)比較中,只考慮網(wǎng)絡(luò)地址;不考慮主機(jī)位。 返回是``-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)建一個(gè) IPv6 網(wǎng)絡(luò)定義。 address 可以是以下之一:
-
一個(gè)由IP地址和可選前綴長度組成的字符串,用斜線(
/)分開。 IP地址是網(wǎng)絡(luò)地址,前綴長度必須是一個(gè)數(shù)字,即*prefix*。 如果沒有提供前綴長度,就認(rèn)為是``/128``。請(qǐng)注意,目前不支持?jǐn)U展的網(wǎng)絡(luò)掩碼。 這意味著
2001:db00::0/24是一個(gè)有效的參數(shù),而2001:db00::0/ffff:ff00::不是。 -
一個(gè)適合128位的整數(shù)。 這相當(dāng)于一個(gè)單地址網(wǎng)絡(luò),網(wǎng)絡(luò)地址是*address*,掩碼是``/128``。
-
一個(gè)整數(shù)被打包成一個(gè)長度為 16 的大端序 bytes 對(duì)象。 其解釋類似于一個(gè)整數(shù)的 address。
-
一個(gè)地址描述和一個(gè)網(wǎng)絡(luò)掩碼的雙元組,其中地址描述是一個(gè)字符串,一個(gè) 128 位的整數(shù),一個(gè) 16 字節(jié)的打包整數(shù),或者一個(gè)現(xiàn)有的 IPv6Address 對(duì)象;而網(wǎng)絡(luò)掩碼是一個(gè)代表前綴長度的整數(shù)。
如果 address 不是一個(gè)有效的 IPv6 地址則會(huì)引發(fā) AddressValueError。 如果掩碼對(duì) IPv6 地址無效則會(huì)引發(fā) NetmaskValueError。
如果 strict 是 True,并且在提供的地址中設(shè)置了主機(jī)位,那么 ValueError 將被觸發(fā)。 否則,主機(jī)位將被屏蔽掉,以確定適當(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()
返回一個(gè)網(wǎng)絡(luò)中可用主機(jī)的迭代器。 可用的主機(jī)是屬于該網(wǎng)絡(luò)的所有IP地址,除了Subnet-Router任播的地址。 對(duì)于掩碼長度為127的網(wǎng)絡(luò),子網(wǎng)-路由器任播地址也包括在結(jié)果中。掩碼為128的網(wǎng)絡(luò)將返回一個(gè)包含單一主機(jī)地址的列表。
-
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)
請(qǐng)參考 IPv4Network 中的相應(yīng)屬性文檔。
-
is_site_local
如果這些屬性對(duì)網(wǎng)絡(luò)地址和廣播地址都是True,那么對(duì)整個(gè)網(wǎng)絡(luò)來說就是True。
運(yùn)算符
網(wǎng)絡(luò)對(duì)象支持一些運(yùn)算符。 除非另有說明,運(yùn)算符只能在兼容的對(duì)象之間應(yīng)用(例如,IPv4與IPv4,IPv6與IPv6)。
邏輯運(yùn)算符
網(wǎng)絡(luò)對(duì)象可以用常規(guī)的邏輯運(yùn)算符集進(jìn)行比較。網(wǎng)絡(luò)對(duì)象首先按網(wǎng)絡(luò)地址排序,然后按網(wǎng)絡(luò)掩碼排序。
迭代
網(wǎng)絡(luò)對(duì)象可以被迭代,以列出屬于該網(wǎng)絡(luò)的所有地址。 對(duì)于迭代,所有 主機(jī)都會(huì)被返回,包括不可用的主機(jī)(對(duì)于可用的主機(jī),使用 hosts() 方法)。 一個(gè)例子:
>>> 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ò)對(duì)象可以作為地址的容器。 一些例子:
>>> 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
接口對(duì)象
接口對(duì)象是 hashable 的,所以它們可以作為字典中的鍵使用。
class ipaddress.IPv4Interface(address)
構(gòu)建一個(gè) IPv4 接口。 address 的含義與 IPv4Network 構(gòu)造器中的一樣,不同之處在于任意主機(jī)地址總是會(huì)被接受。
IPv4Interface 是 IPv4Address 的一個(gè)子類,所以它繼承了該類的所有屬性。 此外,還有以下屬性可用:
-
ip
地址(IPv4Address)沒有網(wǎng)絡(luò)信息。
>>> interface = IPv4Interface('192.0.2.5/24')>>> interface.ipIPv4Address('192.0.2.5')
-
network
該接口所屬的網(wǎng)絡(luò)(IPv4Network)。
>>> interface = IPv4Interface('192.0.2.5/24')>>> interface.networkIPv4Network('192.0.2.0/24')
-
with_prefixlen
用前綴符號(hào)表示的接口與掩碼的字符串。
>>> interface = IPv4Interface('192.0.2.5/24')>>> interface.with_prefixlen'192.0.2.5/24'
-
with_netmask
帶有網(wǎng)絡(luò)的接口的網(wǎng)絡(luò)掩碼字符串表示。
>>> interface = IPv4Interface('192.0.2.5/24')>>> interface.with_netmask'192.0.2.5/255.255.255.0'
-
with_hostmask
帶有網(wǎng)絡(luò)的接口的主機(jī)掩碼字符串表示。
>>> interface = IPv4Interface('192.0.2.5/24')>>> interface.with_hostmask'192.0.2.5/0.0.0.255'
class ipaddress.IPv6Interface(address)
構(gòu)建一個(gè) IPv6 接口。 address 的含義與 IPv6Network 構(gòu)造器中的一樣,不同之處在于任意主機(jī)地址總是會(huì)被接受。
IPv6Interface 是 IPv6Address 的一個(gè)子類,所以它繼承了該類的所有屬性。 此外,還有以下屬性可用:
-
ip
-
network
-
with_prefixlen
-
with_netmask
-
with_hostmask
請(qǐng)參考 IPv4Interface 中的相應(yīng)屬性文檔。
運(yùn)算符
接口對(duì)象支持一些運(yùn)算符。 除非另有說明,運(yùn)算符只能在兼容的對(duì)象之間應(yīng)用(即IPv4與IPv4,IPv6與IPv6)。
邏輯運(yùn)算符
接口對(duì)象可以用通常的邏輯運(yùn)算符集進(jìn)行比較。
對(duì)于相等比較(==``和!=``),IP地址和網(wǎng)絡(luò)都必須是相同的對(duì)象才會(huì)相等。 一個(gè)接口不會(huì)與任何地址或網(wǎng)絡(luò)對(duì)象相等。
對(duì)于排序 (<、> 等),規(guī)則是不同的。 具有相同 IP 版本的接口和地址對(duì)象可以被比較,而地址對(duì)象總是在接口對(duì)象之前排序。 兩個(gè)接口對(duì)象首先通過它們的網(wǎng)絡(luò)進(jìn)行比較,如果它們是相同的,則通過它們的 IP 地址進(jìn)行比較。
其他模塊級(jí)別函數(shù)
該模塊還提供以下模塊級(jí)函數(shù):
ipaddress.v4_int_to_packed(address)
以網(wǎng)絡(luò)(大端序)順序?qū)⒁粋€(gè)地址表示為 4 個(gè)打包的字節(jié)。address 是一個(gè) IPv4 IP 地址的整數(shù)表示。 如果整數(shù)是負(fù)數(shù)或太大而不滿足 IPv4 IP 地址要求,會(huì)觸發(fā)一個(gè) 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ū)⒁粋€(gè)地址表示為 4 個(gè)打包的字節(jié)。address 是一個(gè)IPv6 IP地址的整數(shù)表示。 如果整數(shù)是負(fù)數(shù)或太大而不滿足 IPv6 IP 地址要求,會(huì)觸發(fā)一個(gè) ValueError。
ipaddress.summarize_address_range(first, last)
給出第一個(gè)和最后一個(gè) IP 地址,返回總結(jié)的網(wǎng)絡(luò)范圍的迭代器。 first 是范圍內(nèi)的第一個(gè) IPv4Address 或 IPv6Address,last 是范圍內(nèi)的最后一個(gè) IPv4Address 或 IPv6Address。 如果 first 或 last 不是IP地址或不是同一版本則會(huì)引發(fā) TypeError。 如果 last 不大于 first,或者 first 的地址版本不是 4 或 6 則會(huì)引發(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)
返回一個(gè) IPv4Network 或 IPv6Network 對(duì)象的迭代器。 addresses 是一個(gè) IPv4Network 或 IPv6Network 對(duì)象的迭代器。 如果 addresses 包含混合版本的對(duì)象則會(huì)引發(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)
返回一個(gè)適合在網(wǎng)絡(luò)和地址之間進(jìn)行排序的鍵。 地址和網(wǎng)絡(luò)對(duì)象在默認(rèn)情況下是不可排序的;它們?cè)诒举|(zhì)上是不同的,所以表達(dá)式:
IPv4Address('192.0.2.0') <= IPv4Network('192.0.2.0/24')
是沒有意義的。 然而,有些時(shí)候,你可能希望讓 ipaddress 對(duì)這些進(jìn)行排序。 如果你需要這樣做,你可以使用這個(gè)函數(shù)作為 sorted() 的 key 參數(shù)。
obj 是一個(gè)網(wǎng)絡(luò)或地址對(duì)象。
自定義異常
為了支持來自類構(gòu)造函數(shù)的更具體的錯(cuò)誤報(bào)告,模塊定義了以下異常:
exception ipaddress.AddressValueError(ValueError)
與地址有關(guān)的任何數(shù)值錯(cuò)誤。
exception ipaddress.NetmaskValueError(ValueError)
與網(wǎng)絡(luò)掩碼有關(guān)的任何數(shù)值錯(cuò)誤。
本文名稱:創(chuàng)新互聯(lián)Python教程:ipaddress—-IPv4/IPv6操作庫
網(wǎng)頁路徑:http://m.5511xx.com/article/ccoessd.html


咨詢
建站咨詢
