日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
創(chuàng)新互聯(lián)Python教程:ipaddress—-IPv4/IPv6操作庫

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。

 
 
 
 
  1. >>> ipaddress.ip_address('192.168.0.1')
  2. IPv4Address('192.168.0.1')
  3. >>> ipaddress.ip_address('2001:db8::')
  4. 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。

 
 
 
 
  1. >>> ipaddress.ip_network('192.168.0.0/28')
  2. 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 地址:

  1. 以十進(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)生歧義。

  2. 一個(gè)32位可容納的整數(shù)。

  3. 一個(gè)長度為 4 的封裝在 bytes 對(duì)象中的整數(shù)(高位優(yōu)先)。

 
 
 
 
  1. >>> ipaddress.IPv4Address('192.168.0.1')
  2. IPv4Address('192.168.0.1')
  3. >>> ipaddress.IPv4Address(3232235521)
  4. IPv4Address('192.168.0.1')
  5. >>> ipaddress.IPv4Address(b'\xC0\xA8\x00\x01')
  6. 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記錄的名稱,例如:

       
       
       
       
    1. >>> ipaddress.ip_address("127.0.0.1").reverse_pointer
    2. '1.0.0.127.in-addr.arpa'
    3. >>> ipaddress.ip_address("2001:db8::1").reverse_pointer
    4. '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 字符串使用。

 
 
 
 
  1. >>> format(ipaddress.IPv4Address('192.168.0.1'))
  2. '192.168.0.1'
  3. >>> '{:#b}'.format(ipaddress.IPv4Address('192.168.0.1'))
  4. '0b11000000101010000000000000000001'
  5. >>> f'{ipaddress.IPv6Address("2001:db8::1000"):s}'
  6. '2001:db8::1000'
  7. >>> format(ipaddress.IPv6Address('2001:db8::1000'), '_X')
  8. '2001_0DB8_0000_0000_0000_0000_0000_1000'
  9. >>> '{:#_n}'.format(ipaddress.IPv6Address('2001:db8::1000'))
  10. '0x2001_0db8_0000_0000_0000_0000_0000_1000'

3.9 新版功能.

class ipaddress.IPv6Address(address)

構(gòu)造一個(gè) IPv6 地址。 如果 address 不是一個(gè)有效的 IPv6 地址,會(huì)拋出 AddressValueError 。

以下是有效的 IPv6 地址:

  1. 一個(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

  2. 適合 128 位的整數(shù).

  3. 一個(gè)打包在長度為 16 字節(jié)的大端序 bytes 對(duì)象中的整數(shù)。

 
 
 
 
  1. >>> ipaddress.IPv6Address('2001:db8::1000')
  2. IPv6Address('2001:db8::1000')
  3. >>> ipaddress.IPv6Address('ff02::5678%1')
  4. 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ù):

 
 
 
 
  1. >>> str(ipaddress.IPv4Address('192.168.0.1'))
  2. '192.168.0.1'
  3. >>> int(ipaddress.IPv4Address('192.168.0.1'))
  4. 3232235521
  5. >>> str(ipaddress.IPv6Address('::1'))
  6. '::1'
  7. >>> int(ipaddress.IPv6Address('::1'))
  8. 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地址是不平等的。一些例子:

 
 
 
 
  1. >>> IPv4Address('127.0.0.2') > IPv4Address('127.0.0.1')
  2. True
  3. >>> IPv4Address('127.0.0.2') == IPv4Address('127.0.0.1')
  4. False
  5. >>> IPv4Address('127.0.0.2') != IPv4Address('127.0.0.1')
  6. True
  7. >>> IPv6Address('fe80::1234') == IPv6Address('fe80::1234%1')
  8. False
  9. >>> IPv6Address('fe80::1234%1') != IPv6Address('fe80::1234%2')
  10. True

算術(shù)運(yùn)算符

整數(shù)可以被添加到地址對(duì)象或從地址對(duì)象中減去。 一些例子:

 
 
 
 
  1. >>> IPv4Address('127.0.0.2') + 3
  2. IPv4Address('127.0.0.5')
  3. >>> IPv4Address('127.0.0.2') - 3
  4. IPv4Address('126.255.255.255')
  5. >>> IPv4Address('255.255.255.255') + 1
  6. Traceback (most recent call last):
  7. File "", line 1, in
  8. 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ò)掩碼。 前綴 /``是一個(gè)符號(hào),表示在網(wǎng)絡(luò)掩碼中設(shè)置了多少個(gè)高階位。 一個(gè) *網(wǎng)絡(luò)掩碼* 是一個(gè)設(shè)置了一定數(shù)量高階位的IP地址。 因此,前綴/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 可以是以下之一:

  1. 一個(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

  2. 一個(gè)可轉(zhuǎn)化為32位的整數(shù)。 這相當(dāng)于一個(gè)單地址的網(wǎng)絡(luò),網(wǎng)絡(luò)地址是*address*,掩碼是``/32``。

  3. 一個(gè)整數(shù)被打包成一個(gè)長度為 4 的大端序 bytes 對(duì)象。 其解釋類似于一個(gè)整數(shù) address。

  4. 一個(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。

如果 strictTrue,并且在提供的地址中設(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_prefixlencompressed 總是與 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ī)地址的列表。

       
       
       
       
    1. >>> list(ip_network('192.0.2.0/29').hosts())
    2. [IPv4Address('192.0.2.1'), IPv4Address('192.0.2.2'),
    3. IPv4Address('192.0.2.3'), IPv4Address('192.0.2.4'),
    4. IPv4Address('192.0.2.5'), IPv4Address('192.0.2.6')]
    5. >>> list(ip_network('192.0.2.0/31').hosts())
    6. [IPv4Address('192.0.2.0'), IPv4Address('192.0.2.1')]
    7. >>> list(ip_network('192.0.2.1/32').hosts())
    8. [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。

       
       
       
       
    1. >>> n1 = ip_network('192.0.2.0/28')
    2. >>> n2 = ip_network('192.0.2.1/32')
    3. >>> list(n1.address_exclude(n2))
    4. [IPv4Network('192.0.2.8/29'), IPv4Network('192.0.2.4/30'),
    5. 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_diffnew_prefix 中的一個(gè),且只有一個(gè)。 返回一個(gè)網(wǎng)絡(luò)對(duì)象的迭代器。

       
       
       
       
    1. >>> list(ip_network('192.0.2.0/24').subnets())
    2. [IPv4Network('192.0.2.0/25'), IPv4Network('192.0.2.128/25')]
    3. >>> list(ip_network('192.0.2.0/24').subnets(prefixlen_diff=2))
    4. [IPv4Network('192.0.2.0/26'), IPv4Network('192.0.2.64/26'),
    5. IPv4Network('192.0.2.128/26'), IPv4Network('192.0.2.192/26')]
    6. >>> list(ip_network('192.0.2.0/24').subnets(new_prefix=26))
    7. [IPv4Network('192.0.2.0/26'), IPv4Network('192.0.2.64/26'),
    8. IPv4Network('192.0.2.128/26'), IPv4Network('192.0.2.192/26')]
    9. >>> list(ip_network('192.0.2.0/24').subnets(new_prefix=23))
    10. Traceback (most recent call last):
    11. File "", line 1, in
    12. raise ValueError('new prefix must be longer')
    13. ValueError: new prefix must be longer
    14. >>> list(ip_network('192.0.2.0/24').subnets(new_prefix=25))
    15. [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_diffnew_prefix 中的一個(gè),而且只有一個(gè)。 返回一個(gè)單一的網(wǎng)絡(luò)對(duì)象。

       
       
       
       
    1. >>> ip_network('192.0.2.0/24').supernet()
    2. IPv4Network('192.0.2.0/23')
    3. >>> ip_network('192.0.2.0/24').supernet(prefixlen_diff=2)
    4. IPv4Network('192.0.0.0/22')
    5. >>> ip_network('192.0.2.0/24').supernet(new_prefix=20)
    6. IPv4Network('192.0.0.0/20')
  • subnet_of(other)

    如果這個(gè)網(wǎng)絡(luò)是*other*的子網(wǎng),則返回``True``。

       
       
       
       
    1. >>> a = ip_network('192.168.1.0/24')
    2. >>> b = ip_network('192.168.1.128/30')
    3. >>> b.subnet_of(a)
    4. True

    3.7 新版功能.

  • supernet_of(other)

    如果這個(gè)網(wǎng)絡(luò)是*other*的超網(wǎng),則返回``True``。

       
       
       
       
    1. >>> a = ip_network('192.168.1.0/24')
    2. >>> b = ip_network('192.168.1.128/30')
    3. >>> a.supernet_of(b)
    4. True

    3.7 新版功能.

  • compare_networks(other)

    將這個(gè)網(wǎng)絡(luò)與*ohter*網(wǎng)絡(luò)進(jìn)行比較。 在這個(gè)比較中,只考慮網(wǎng)絡(luò)地址;不考慮主機(jī)位。 返回是``-1`` 、 0``或``1。

       
       
       
       
    1. >>> ip_network('192.0.2.1/32').compare_networks(ip_network('192.0.2.2/32'))
    2. -1
    3. >>> ip_network('192.0.2.1/32').compare_networks(ip_network('192.0.2.0/32'))
    4. 1
    5. >>> ip_network('192.0.2.1/32').compare_networks(ip_network('192.0.2.1/32'))
    6. 0

    3.7 版后已移除: 它使用與”<”、”==”和”>”相同的排序和比較算法。

class ipaddress.IPv6Network(address, strict=True)

構(gòu)建一個(gè) IPv6 網(wǎng)絡(luò)定義。 address 可以是以下之一:

  1. 一個(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:: 不是。

  2. 一個(gè)適合128位的整數(shù)。 這相當(dāng)于一個(gè)單地址網(wǎng)絡(luò),網(wǎng)絡(luò)地址是*address*,掩碼是``/128``。

  3. 一個(gè)整數(shù)被打包成一個(gè)長度為 16 的大端序 bytes 對(duì)象。 其解釋類似于一個(gè)整數(shù)的 address。

  4. 一個(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。

如果 strictTrue,并且在提供的地址中設(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è)例子:

 
 
 
 
  1. >>> for addr in IPv4Network('192.0.2.0/28'):
  2. ... addr
  3. ...
  4. IPv4Address('192.0.2.0')
  5. IPv4Address('192.0.2.1')
  6. IPv4Address('192.0.2.2')
  7. IPv4Address('192.0.2.3')
  8. IPv4Address('192.0.2.4')
  9. IPv4Address('192.0.2.5')
  10. IPv4Address('192.0.2.6')
  11. IPv4Address('192.0.2.7')
  12. IPv4Address('192.0.2.8')
  13. IPv4Address('192.0.2.9')
  14. IPv4Address('192.0.2.10')
  15. IPv4Address('192.0.2.11')
  16. IPv4Address('192.0.2.12')
  17. IPv4Address('192.0.2.13')
  18. IPv4Address('192.0.2.14')
  19. IPv4Address('192.0.2.15')

作為地址容器的網(wǎng)絡(luò)

網(wǎng)絡(luò)對(duì)象可以作為地址的容器。 一些例子:

 
 
 
 
  1. >>> IPv4Network('192.0.2.0/28')[0]
  2. IPv4Address('192.0.2.0')
  3. >>> IPv4Network('192.0.2.0/28')[15]
  4. IPv4Address('192.0.2.15')
  5. >>> IPv4Address('192.0.2.6') in IPv4Network('192.0.2.0/28')
  6. True
  7. >>> IPv4Address('192.0.3.6') in IPv4Network('192.0.2.0/28')
  8. 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ò)信息。

       
       
       
       
    1. >>> interface = IPv4Interface('192.0.2.5/24')
    2. >>> interface.ip
    3. IPv4Address('192.0.2.5')
  • network

    該接口所屬的網(wǎng)絡(luò)(IPv4Network)。

       
       
       
       
    1. >>> interface = IPv4Interface('192.0.2.5/24')
    2. >>> interface.network
    3. IPv4Network('192.0.2.0/24')
  • with_prefixlen

    用前綴符號(hào)表示的接口與掩碼的字符串。

       
       
       
       
    1. >>> interface = IPv4Interface('192.0.2.5/24')
    2. >>> interface.with_prefixlen
    3. '192.0.2.5/24'
  • with_netmask

    帶有網(wǎng)絡(luò)的接口的網(wǎng)絡(luò)掩碼字符串表示。

       
       
       
       
    1. >>> interface = IPv4Interface('192.0.2.5/24')
    2. >>> interface.with_netmask
    3. '192.0.2.5/255.255.255.0'
  • with_hostmask

    帶有網(wǎng)絡(luò)的接口的主機(jī)掩碼字符串表示。

       
       
       
       
    1. >>> interface = IPv4Interface('192.0.2.5/24')
    2. >>> interface.with_hostmask
    3. '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。

 
 
 
 
  1. >>> ipaddress.ip_address(3221225985)
  2. IPv4Address('192.0.2.1')
  3. >>> ipaddress.v4_int_to_packed(3221225985)
  4. 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。 如果 firstlast 不是IP地址或不是同一版本則會(huì)引發(fā) TypeError。 如果 last 不大于 first,或者 first 的地址版本不是 4 或 6 則會(huì)引發(fā) ValueError。

 
 
 
 
  1. >>> [ipaddr for ipaddr in ipaddress.summarize_address_range(
  2. ... ipaddress.IPv4Address('192.0.2.0'),
  3. ... ipaddress.IPv4Address('192.0.2.130'))]
  4. [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。

 
 
 
 
  1. >>> [ipaddr for ipaddr in
  2. ... ipaddress.collapse_addresses([ipaddress.IPv4Network('192.0.2.0/25'),
  3. ... ipaddress.IPv4Network('192.0.2.128/25')])]
  4. [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á)式:

 
 
 
 
  1. 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