Python中實現(xiàn)ipaddress網(wǎng)絡(luò)地址的處理
ipaddress庫提供了處理IPv4與IPv6網(wǎng)絡(luò)地址的類。這些類支持驗證,查找網(wǎng)絡(luò)上的地址和主機,以及其他常見的操作。
本篇,將詳細(xì)介紹Python中ipaddress庫的使用規(guī)則。(內(nèi)容涉及很多計算機網(wǎng)絡(luò)知識,如果不懂,可以參考書籍《計算機網(wǎng)絡(luò)》)
地址一般來說,我們使用ipaddress庫是通過ip_address()函數(shù)構(gòu)建一個地址對象。它會返回一個IPv4Address或IPv6Address實例。實例如下:
import ipaddressimport binasciiaddresses = [ ’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))
運行之后,效果如下:
網(wǎng)絡(luò)地址通常用一個基本地址和一個掩碼表示,掩碼指示地址的哪些部分表示網(wǎng)絡(luò),哪些部分表示該網(wǎng)絡(luò)上的地址。可以顯式的表示掩碼,也可以使用一個前綴長度值來表示,示例如下:
import ipaddressaddresses = [ ’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('以主機掩碼格式展示:', net.with_hostmask) print('網(wǎng)絡(luò)中的地址總數(shù):', net.num_addresses) print()
運行之后,效果如下:
涉及IP地址與子網(wǎng)掩碼以及廣播地址等知識,讀者可以參考《計算機網(wǎng)絡(luò)》。
打印網(wǎng)絡(luò)地址有多少IP可用在IPv4的網(wǎng)絡(luò)地址中,我們一般將其分為A,B,C類,上面我們提供的192.168.1.0是一個C類地址。學(xué)過網(wǎng)絡(luò)的應(yīng)該一眼就可以看出來其主機地址有254個,基地址為192.168.1.0,而廣播地址為192.168.1.255。整體是256個。
因為這是C類地址,數(shù)學(xué)稍微好點的肯定手到擒來,但是我給你一個IPv6或者IPv4的A類地址,能口算出來多少的恐怕很少吧,而ipaddress庫可以直接遍歷打印,示例如下:
import ipaddressn = ’192.168.1.0/24’net = ipaddress.ip_network(n)for ip in zip(net): print(ip)
運行之后,效果如下:
這里遍歷迭代,列出了所有的地址。如果只列出可用的主機地址把zip(net)改為zip(net.hosts())即可(也就是去除了廣播地址與基地址的其他地址)。
當(dāng)然,如果你只是想確定一個地址是否在網(wǎng)絡(luò)中,可以直接使用in進(jìn)行判斷。示例如下:
import ipaddressn = ’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ò)上的一個特定地址,可以表示為一個主機地址和一個網(wǎng)絡(luò)前綴或網(wǎng)絡(luò)掩碼。示例如下:
import ipaddressaddresses = [ ’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('主機掩碼表示:', iface.with_hostmask)
運行之后,效果如下:
到此這篇關(guān)于Python中實現(xiàn)ipaddress網(wǎng)絡(luò)地址的處理的文章就介紹到這了,更多相關(guān)Python ipaddress網(wǎng)絡(luò)地址 內(nèi)容請搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!
相關(guān)文章:
1. XML入門的常見問題(三)2. HTTP協(xié)議常用的請求頭和響應(yīng)頭響應(yīng)詳解說明(學(xué)習(xí))3. ASP基礎(chǔ)入門第四篇(腳本變量、函數(shù)、過程和條件語句)4. HTML5實戰(zhàn)與剖析之觸摸事件(touchstart、touchmove和touchend)5. .NET Framework各版本(.NET2.0 3.0 3.5 4.0)區(qū)別6. ASP將數(shù)字轉(zhuǎn)中文數(shù)字(大寫金額)的函數(shù)7. XML在語音合成中的應(yīng)用8. jscript與vbscript 操作XML元素屬性的代碼9. php使用正則驗證密碼字段的復(fù)雜強度原理詳細(xì)講解 原創(chuàng)10. 不要在HTML中濫用div
