一、ipaddr簡介
ipaddr是一款基於Python編寫的IP地址庫,提供了對IP地址的各種操作。它具有豐富的功能,包括但不限於以下幾個方面:
- IP地址驗證
- IP地址轉換
- IP地址枚舉
- IP地址歸類
- IP地址操作
二、IP地址驗證
ipaddr可以對IP地址進行驗證,可以判斷輸入的IP地址是否符合有效IP地址的格式,並且可以判斷輸入的IP地址是否是私有IP地址、受保留IP地址、IP地址段等等。示例如下:
import ipaddr
# 判斷是否是IPv4的有效地址
print(ipaddr.IPv4Address('192.168.1.1').is_valid())
# 輸出為True
# 判斷是否是IPv4的私有地址
print(ipaddr.IPv4Address('192.168.1.1').is_private())
# 輸出為True
# 判斷是否是IPv4的受保留地址
print(ipaddr.IPv4Address('240.0.0.1').is_reserved())
# 輸出為True
三、IP地址轉換
ipaddr可以將IP地址轉換成二進制、十進制、十六進制等等不同的格式,並且也可以將不同進制的IP地址相互轉換。示例如下:
import ipaddr
# 將IPv4地址轉換成二進制形式
print(ipaddr.IPv4Address('192.168.1.1').binary)
# 輸出為:b'11000000101010000000000100000001'
# 將IPv4地址轉換成十六進制形式
print(ipaddr.IPv4Address('192.168.1.1').hex)
# 輸出為:c0a80101
# 將IPv4地址轉換成十進制形式
print(int(ipaddr.IPv4Address('192.168.1.1')))
# 輸出為:3232235777
# 將二進制形式的IPv4地址轉換成十進制形式
print(int(ipaddr.IPv4Address('11000000101010000000000100000001'), 2))
# 輸出為:3232235777
# 將十六進制形式的IPv4地址轉換成十進制形式
print(int(ipaddr.IPv4Address('c0a80101'), 16))
# 輸出為:3232235777
四、IP地址枚舉
ipaddr可以對指定的IP地址段進行枚舉,可以枚舉出該IP地址段內的所有IP地址,也支持將IP地址段等分成若干段,並對每個子段進行枚舉。示例如下:
import ipaddr
# 枚舉IPv4地址段內的所有IP地址
for ip in ipaddr.IPv4Network('192.168.1.0/24'):
print(str(ip))
# 輸出為:
# 192.168.1.0
# 192.168.1.1
# 192.168.1.2
# ...
# 192.168.1.254
# 192.168.1.255
# 將IPv4地址段分成4個子段,並枚舉每個子段的IP地址
for subnet in ipaddr.IPv4Network('192.168.1.0/24').subnet(4):
for ip in subnet:
print(str(ip))
print('----')
# 輸出為:
# 192.168.1.0
# 192.168.1.1
# 192.168.1.2
# 192.168.1.3
# ----
# 192.168.1.4
# 192.168.1.5
# 192.168.1.6
# 192.168.1.7
# ----
# 192.168.1.8
# ...
五、IP地址歸類
ipaddr可以將IP地址歸類,即將一個IP地址劃分到指定的地址塊內。比如,可以將IPv4地址歸類到廣域網地址、私有地址、迴環地址等幾類中。示例如下:
import ipaddr
# 將IPv4地址歸類到廣域網地址、私有地址、迴環地址、鏈路地址、組播地址、保留地址等6類中
ip = ipaddr.IPv4Address('192.168.1.1')
print([ip in subnet for subnet in ipaddr.IPv4Network('0.0.0.0/0').subnet_of_length(8)])
# 輸出為:
# [True, True, True, False, False, True]
# 將IPv6地址歸類到保留地址、鏈路本地地址、唯一本地地址、組播地址、互聯網地址、無法識別地址等6類中
ip = ipaddr.IPv6Address('2001:db8::1234')
print([ip in subnet for subnet in ipaddr.IPv6Network('::/0').subnet_of_length(8)])
# 輸出為:
# [True, False, False, False, True, True]
六、IP地址操作
ipaddr還可以對IP地址進行運算,包括但不限於取反、二進制與、二進制或等操作。示例如下:
import ipaddr
# 對IPv4地址進行取反操作
ip = ipaddr.IPv4Address('192.168.1.1')
print(~ip)
# 輸出為:IPv4Address('63.87.254.254')
# 對IPv6地址進行與操作
ip1 = ipaddr.IPv6Address('2001:db8::1234')
ip2 = ipaddr.IPv6Address('2001:db8::4321')
print(ip1 & ip2)
# 輸出為:IPv6Address('2001:db8::')
# 對IPv6地址進行或操作
print(ip1 | ip2)
# 輸出為:IPv6Address('2001:db8::5325')
原創文章,作者:CNODH,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/368909.html