ipaddress库提供了处理IPv4与IPv6网络地址的类。这些类支持验证,查找网络上的地址和主机,以及其他常见的操作。
示例代码1:
import ipaddress
x = ipaddress.ip_address("192.168.1.1")
print(x)
y = ipaddress.ip_network("192.168.1.1")
print(y)
运行结果:
示例代码2:
import ipaddress
n = '192.168.1.0/24'
net = ipaddress.ip_network(n)
print(net)
for ip in zip(net):
print(ip)
运行结果:
示例代码3:
import ipaddress
n = '192.168.1.0/24'
net = ipaddress.ip_network(n)
print(net)
ip = ipaddress.ip_address('192.168.1.255')
if ip in net:
print("True")
运行结果:
地址
示例代码:
import ipaddress
import binascii
addresses = [
'12.33.3.51',
'192.168.1.1',
'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, "是否是专用地址:", address.is_private)
print(address, "是否是公网地址:", address.is_global)
print(address, "是否是多播地址:", address.is_multicast)
print(address, "是否是环回地址:", address.is_loopback)
print(address, "是否是link-local保留:", address.is_link_local)
print(address, "判断地址是否未指定:", address.is_unspecified)
print(address, "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, "是否是专用地址:", net.is_private)
print(net, "该网段的广播地址:", net.broadcast_address)
print(net, "IP地址与子网掩码:", net.compressed)
print(net, "掩码以二进制的格式展示:", net.with_netmask)
print(net, "以主机掩码格式展示:", net.with_hostmask)
print(net, "网络中的地址总数:", net.num_addresses)
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)
print()
运行结果:
应用案例
1. 检查ip的有效性:
示例代码:
import ipaddress
# 检查ip的有效性
def check_valid_ip(ip):
try:
ipaddress.ip_address(ip.strip())
return True
except Exception as e:
print(e)
return False
if __name__ == '__main__':
ips = ['192.168.1.1', '192.168.1.366', '10.25.1.36']
for ip in ips:
res = check_valid_ip(ip)
if res:
print(ip, res)
else:
print(ip, res)
运行结果:
2.判断IP是内网还是外网
示例代码:
import ipaddress
# 判断ip是内网还是外网
def check_ip_is_internet(ip):
try:
return ipaddress.ip_address(ip.strip()).is_private
except Exception as e:
print(e)
return False
if __name__ == '__main__':
ips = ['192.168.1.1', '192.168.1.366', '10.25.1.36']
for ip in ips:
res = check_ip_is_internet(ip)
if res:
print(ip, res)
else:
print(ip, res)
运行结果:
参考博文: