Python中實現(xiàn)ipaddress網絡地址的處理
前言
ipaddress庫提供了處理IPv4與IPv6網絡地址的類。這些類支持驗證,查找網絡上的地址和主機,以及其他常見的操作。
本篇,將詳細介紹Python中ipaddress庫的使用規(guī)則。(內容涉及很多計算機網絡知識,如果不懂,可以參考書籍《計算機網絡》)
地址
一般來說,我們使用ipaddress庫是通過ip_address()函數(shù)構建一個地址對象。它會返回一個IPv4Address或IPv6Address實例。實例如下:
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("是否是公網地址:", 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進制:", binascii.hexlify(address.packed))
運行之后,效果如下:
網絡
網絡地址通常用一個基本地址和一個掩碼表示,掩碼指示地址的哪些部分表示網絡,哪些部分表示該網絡上的地址??梢燥@式的表示掩碼,也可以使用一個前綴長度值來表示,示例如下:
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("該網段的廣播地址:", net.broadcast_address) print("IP地址與子網掩碼:", net.compressed) print("掩碼以二進制的格式展示:", net.with_netmask) print("以主機掩碼格式展示:", net.with_hostmask) print("網絡中的地址總數(shù):", net.num_addresses) print()
運行之后,效果如下:
涉及IP地址與子網掩碼以及廣播地址等知識,讀者可以參考《計算機網絡》。
打印網絡地址有多少IP可用
在IPv4的網絡地址中,我們一般將其分為A,B,C類,上面我們提供的192.168.1.0是一個C類地址。學過網絡的應該一眼就可以看出來其主機地址有254個,基地址為192.168.1.0,而廣播地址為192.168.1.255。整體是256個。
因為這是C類地址,數(shù)學稍微好點的肯定手到擒來,但是我給你一個IPv6或者IPv4的A類地址,能口算出來多少的恐怕很少吧,而ipaddress庫可以直接遍歷打印,示例如下:
import ipaddress n = '192.168.1.0/24' net = ipaddress.ip_network(n) for ip in zip(net): print(ip)
運行之后,效果如下:
這里遍歷迭代,列出了所有的地址。如果只列出可用的主機地址把zip(net)改為zip(net.hosts())即可(也就是去除了廣播地址與基地址的其他地址)。
當然,如果你只是想確定一個地址是否在網絡中,可以直接使用in進行判斷。示例如下:
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("在里面")
接口
網絡接口表示網絡上的一個特定地址,可以表示為一個主機地址和一個網絡前綴或網絡掩碼。示例如下:
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("網絡地址:", iface.network) print("ip地址:", iface.ip) print("字符串表示形式:", iface.with_prefixlen) print("二進制表示掩碼:", iface.with_netmask) print("主機掩碼表示:", iface.with_hostmask)
運行之后,效果如下:
到此這篇關于Python中實現(xiàn)ipaddress網絡地址的處理的文章就介紹到這了,更多相關Python ipaddress網絡地址 內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
使用Python根據(jù)一個列表的順序對其他列表進行排序
這篇文章主要介紹了使用Python根據(jù)一個列表的順序對其他列表進行排序,根據(jù)列表B中每個元素的下標來獲取列表A中對應位置的元素,將其作為排序依據(jù)即可,需要的朋友可以參考下2023-10-10Python MySQLdb模塊連接操作mysql數(shù)據(jù)庫實例
這篇文章主要介紹了Python MySQLdb模塊連接操作mysql數(shù)據(jù)庫實例,本文直接給出操作mysql代碼實例,包含創(chuàng)建表、插入數(shù)據(jù)、插入多條數(shù)據(jù)、查詢數(shù)據(jù)等內容,需要的朋友可以參考下2015-04-04Python Switch Case三種實現(xiàn)方法代碼實例
這篇文章主要介紹了Python Switch Case2種實現(xiàn)方法代碼實例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2020-06-06