我正在尝试获取我拥有的 IP 地址的子网。
Eg :
1
子网掩码 :255.255.255.0
Input : 192.178.2.55
输出 :192.178.2.0
2
子网掩码 :255.255.0.0
Input : 192.178.2.55
输出 :192.178.0.0
目前,我这样做的方式(对于子网 255.255.255.0)
ip = '192.178.2.55'
subnet = '.'.join(ip.split('.')[:2]) + '.0.0'
subnet
'192.178.0.0'
我看到蟒蛇有IP地址图书馆。但是我找不到可以完成上述任务的方法。
奖金:自IP地址支持 IPv4 和 IPv6(如果相同的功能可用于两者)。
The ipaddress.ip_network函数可以采用任何字符串格式IPv4Network
and IPv6Network
可以采取,包括address/mask
format.
由于您实际上传递的不是网络地址,而是该网络内设置了主机位的地址,因此您需要使用strict=False
.
So:
>>> net = ipaddress.ip_network('192.178.2.55/255.255.255.0', strict=False)
>>> net
IPv4Network('192.178.2.0/24')
>>> net.network_address
IPv4Address('192.178.2.0')
>>> net.netmask
IPv4Address('255.255.255.0')
或者,您可以使用ip_interface并从那里提取网络:
>>> iface = ipaddress.ip_interface('192.178.2.55/255.255.255.0')
>>> iface
IPv4Interface('192.178.2.55/24')
>>> iface.network
IPv4Network('192.178.2.0/24')
>>> iface.netmask
IPv4Address('255.255.255.0')
>>> iface.ip
IPv4Address('192.178.2.55')
>>> iface.network.network_address
IPv4Address('192.178.2.0')
您想要两者中的哪一个取决于您到底想要代表什么。请注意,Interface 类型是 Address 类型的子类,当然它们会记住用于构造它们的原始地址,而 Network 类会记住网络地址;这两者之一通常是决定因素。
当然,它们都可以在 IPv6 上正常工作:
>>> ipaddress.ip_interface('2001:db8::1000/32')
IPv6Interface('2001:db8::1000/32')
>>> ipaddress.ip_interface('2001:db8::1000/32').network.network_address
IPv6Address('2001:db8::')
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)