日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

python ipaddress_Python3标准库:ipaddress Internet地址

發(fā)布時(shí)間:2024/9/15 python 47 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python ipaddress_Python3标准库:ipaddress Internet地址 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

1. ipaddress Internet地址

ipaddress模塊提供了處理IPv4和IPv6網(wǎng)絡(luò)地址的類。這些類支持驗(yàn)證,查找網(wǎng)絡(luò)上的地址和主機(jī),以及其他常見操作。

1.1 地址

最基本的對象表示網(wǎng)絡(luò)地址本身。可以向ip_address()傳入一個(gè)字符串、整數(shù)或字節(jié)序列來構(gòu)造一個(gè)地址。返回值是一個(gè)IPV4Address或IPv6Address實(shí)例,這取決于使用什么類型的地址。

importbinasciiimportipaddress

ADDRESSES=['10.9.0.6','fdfd:87b5:b475:5e3e:b1bc:e121:a8eb:14aa',

]for ip inADDRESSES:

addr=ipaddress.ip_address(ip)print('{!r}'.format(addr))print('IP version:', addr.version)print('is private:', addr.is_private)print('packed form:', binascii.hexlify(addr.packed))print('integer:', int(addr))print()

這兩個(gè)類可以提供地址的不同表示以滿足不同的用途,還可以回答一些基本斷言,如這個(gè)地址是否為組播通信保留,或者它是否在一個(gè)專用網(wǎng)(private network)中。

1.2 網(wǎng)絡(luò)

網(wǎng)絡(luò)由一個(gè)地址范圍定義。通常用一個(gè)基本地址和一個(gè)掩碼表示,掩碼指示地址的哪些部分表示網(wǎng)絡(luò),哪些部分表示該網(wǎng)絡(luò)上的地址。可以顯式表示掩碼,也可以使用一個(gè)前綴長度值來表示,如下例所示。

importipaddress

NETWORKS=['10.9.0.0/24','fdfd:87b5:b475:5e3e::/64',

]for n inNETWORKS:

net=ipaddress.ip_network(n)print('{!r}'.format(net))print('is private:', net.is_private)print('broadcast:', net.broadcast_address)print('compressed:', net.compressed)print('with netmask:', net.with_netmask)print('with hostmask:', net.with_hostmask)print('num addresses:', net.num_addresses)print()

與地址一樣,對應(yīng)IPv4和IPv6網(wǎng)絡(luò)分別有兩個(gè)網(wǎng)絡(luò)類。每個(gè)類都提供了一些屬性或方法來訪問與網(wǎng)絡(luò)相關(guān)的值,如廣播地址和主機(jī)可以使用的網(wǎng)絡(luò)地址。

網(wǎng)絡(luò)實(shí)例是可迭代的,會(huì)提供網(wǎng)絡(luò)上的地址。

importipaddress

NETWORKS=['10.9.0.0/24','fdfd:87b5:b475:5e3e::/64',

]for n inNETWORKS:

net=ipaddress.ip_network(n)print('{!r}'.format(net))for i, ip in zip(range(3), net):print(ip)print()

這個(gè)例子只打印了部分地址,因?yàn)镮Pv6網(wǎng)絡(luò)可能包含太多的地址,無法在這里全部輸出。

迭代處理網(wǎng)絡(luò)會(huì)提供地址,不過并不是所有這些地址都能作為主機(jī)的合法地址。例如,網(wǎng)絡(luò)的基地址和廣播地址也包含在內(nèi)。要查找能夠由網(wǎng)絡(luò)上常規(guī)主機(jī)使用的地址,可以使用hosts()方法,它會(huì)生成一個(gè)生成器。

importipaddress

NETWORKS=['10.9.0.0/24','fdfd:87b5:b475:5e3e::/64',

]for n inNETWORKS:

net=ipaddress.ip_network(n)print('{!r}'.format(net))for i, ip in zip(range(3), net.hosts()):print(ip)print()

將這個(gè)例子的輸出與前一個(gè)例子進(jìn)行比較,可以看到,主機(jī)地址中不包含迭代處理整個(gè)網(wǎng)絡(luò)時(shí)生成的前幾個(gè)值。

除了迭代器協(xié)議,網(wǎng)絡(luò)還支持in操作符,可以用來確定一個(gè)地址是否是一個(gè)網(wǎng)絡(luò)的一部分。

importipaddress

NETWORKS=[

ipaddress.ip_network('10.9.0.0/24'),

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

]

ADDRESSES=[

ipaddress.ip_address('10.9.0.6'),

ipaddress.ip_address('10.7.0.31'),

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

ipaddress.ip_address('fe80::3840:c439:b25e:63b0'),

]for ip inADDRESSES:for net inNETWORKS:if ip innet:print('{}\nis on {}'.format(ip, net))break

else:print('{}\nis not on a known network'.format(ip))print()

in的實(shí)現(xiàn)使用網(wǎng)絡(luò)掩碼來測試地址,所以這比展開網(wǎng)絡(luò)上的完整地址列表要高效得多。

1.3 接口

網(wǎng)絡(luò)接口表示網(wǎng)絡(luò)上的一個(gè)特定地址,可以表示為一個(gè)主機(jī)地址和一個(gè)網(wǎng)絡(luò)前綴或網(wǎng)絡(luò)掩碼。

importipaddress

ADDRESSES=['10.9.0.6/24','fdfd:87b5:b475:5e3e:b1bc:e121:a8eb:14aa/64',

]for ip inADDRESSES:

iface=ipaddress.ip_interface(ip)print('{!r}'.format(iface))print('network:\n', iface.network)print('ip:\n', iface.ip)print('IP with prefixlen:\n', iface.with_prefixlen)print('netmask:\n', iface.with_netmask)print('hostmask:\n', iface.with_hostmask)print()

接口對象包含一些屬性,可以分別訪問完整的網(wǎng)絡(luò)和地址,另外提供了多種不同方法來表示接口和網(wǎng)絡(luò)掩碼。

總結(jié)

以上是生活随笔為你收集整理的python ipaddress_Python3标准库:ipaddress Internet地址的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。