您好,登錄后才能下訂單哦!
這篇文章主要為大家展示了“Python中如何處理ipaddress網(wǎng)絡(luò)地址”,內(nèi)容簡(jiǎn)而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領(lǐng)大家一起研究并學(xué)習(xí)一下“Python中如何處理ipaddress網(wǎng)絡(luò)地址”這篇文章吧。
一般來說,我們使用ipaddress庫是通過ip_address()函數(shù)構(gòu)建一個(gè)地址對(duì)象。它會(huì)返回一個(gè)IPv4Address或IPv6Address實(shí)例。實(shí)例如下:
import ipaddress import binascii addresses = [ '121.63.3.59', '2001:0db8:3c4d:0015:0000:0000:1a2f:1a2b' ] for ip in addresses: address = ipaddress.ip_address(ip) print("IP地址:", address) print("IP Version:", address.version) print("是否是專用地址:", address.is_private) print("是否是公網(wǎng)地址:", address.is_global) print("是否是多播地址:", address.is_multicast) print("是否是環(huán)回地址:", address.is_loopback) print("是否是link-local保留:", address.is_link_local) print("判斷地址是否未指定:", address.is_unspecified) print("IP地址16進(jìn)制:", binascii.hexlify(address.packed))
運(yùn)行之后,效果如下:
網(wǎng)絡(luò)地址通常用一個(gè)基本地址和一個(gè)掩碼表示,掩碼指示地址的哪些部分表示網(wǎng)絡(luò),哪些部分表示該網(wǎng)絡(luò)上的地址??梢燥@式的表示掩碼,也可以使用一個(gè)前綴長度值來表示,示例如下:
import ipaddress addresses = [ '192.168.1.0/24', '2001:0db8:3c4d:0015::/64' ] for n in addresses: net = ipaddress.ip_network(n) print("是否是專用地址:", net.is_private) print("該網(wǎng)段的廣播地址:", net.broadcast_address) print("IP地址與子網(wǎng)掩碼:", net.compressed) print("掩碼以二進(jìn)制的格式展示:", net.with_netmask) print("以主機(jī)掩碼格式展示:", net.with_hostmask) print("網(wǎng)絡(luò)中的地址總數(shù):", net.num_addresses) print()
運(yùn)行之后,效果如下:
涉及IP地址與子網(wǎng)掩碼以及廣播地址等知識(shí),讀者可以參考《計(jì)算機(jī)網(wǎng)絡(luò)》。
在IPv4的網(wǎng)絡(luò)地址中,我們一般將其分為A,B,C類,上面我們提供的192.168.1.0是一個(gè)C類地址。學(xué)過網(wǎng)絡(luò)的應(yīng)該一眼就可以看出來其主機(jī)地址有254個(gè),基地址為192.168.1.0,而廣播地址為192.168.1.255。整體是256個(gè)。
因?yàn)檫@是C類地址,數(shù)學(xué)稍微好點(diǎn)的肯定手到擒來,但是我給你一個(gè)IPv6或者IPv4的A類地址,能口算出來多少的恐怕很少吧,而ipaddress庫可以直接遍歷打印,示例如下:
import ipaddress n = '192.168.1.0/24' net = ipaddress.ip_network(n) for ip in zip(net): print(ip)
運(yùn)行之后,效果如下:
這里遍歷迭代,列出了所有的地址。如果只列出可用的主機(jī)地址把zip(net)改為zip(net.hosts())即可(也就是去除了廣播地址與基地址的其他地址)。
當(dāng)然,如果你只是想確定一個(gè)地址是否在網(wǎng)絡(luò)中,可以直接使用in進(jìn)行判斷。示例如下:
import ipaddress n = '192.168.1.0/24' net = ipaddress.ip_network(n) ip=ipaddress.ip_address('192.168.1.233') if ip in net: print("在里面")
網(wǎng)絡(luò)接口表示網(wǎng)絡(luò)上的一個(gè)特定地址,可以表示為一個(gè)主機(jī)地址和一個(gè)網(wǎng)絡(luò)前綴或網(wǎng)絡(luò)掩碼。示例如下:
import ipaddress addresses = [ '192.168.1.251/24', '2001:0db8:3c4d:0015:0000:0000:1a2f:1a2b/64' ] for ip in addresses: iface = ipaddress.ip_interface(ip) print(iface) print("網(wǎng)絡(luò)地址:", iface.network) print("ip地址:", iface.ip) print("字符串表示形式:", iface.with_prefixlen) print("二進(jìn)制表示掩碼:", iface.with_netmask) print("主機(jī)掩碼表示:", iface.with_hostmask)
運(yùn)行之后,效果如下:
以上是“Python中如何處理ipaddress網(wǎng)絡(luò)地址”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。