如果我们有一个像192.168.1.168这样的IP地址。我们有一个网络代表192.168.1.0/24如何找出IP地址是否属于与python2网络?
是否有一个很好的方式(最少代码)来查明IP是否属于网络?
模型netaddr似乎可以,但没有弄清楚如何。
如果我们有一个像192.168.1.168这样的IP地址。我们有一个网络代表192.168.1.0/24如何找出IP地址是否属于与python2网络?
是否有一个很好的方式(最少代码)来查明IP是否属于网络?
模型netaddr似乎可以,但没有弄清楚如何。
import netaddr
ip = netaddr.IPAddress('192.168.1.168').value
network = netaddr.IPNetwork('192.168.1.0/24')
if ip >= network.first and ip <= network.last:
print True
else:
print False
import socket
import struct
def in_net(ip, net):
ipaddr = socket.inet_aton(ip)
netaddr, netmask = net.split('/')
netaddr = socket.inet_aton(netaddr)
ipint = struct.unpack("!I", ipaddr)[0]
netint = struct.unpack("!I", netaddr)[0]
maskint = (0xFFFFFFFF << (32 - int(netmask))) & 0xFFFFFFFF
return ipint & maskint == netint
在Python 3.3+得多:
import ipaddress
def in_net(ip, net):
return ipaddress.ip_address(ip) in ipaddress.ip_network(net)
感谢。但你认为我的答案也能满足需要吗? –
@KramerLi:如果OP愿意并且能够安装'netaddr'包,很可能。但它不是Python的一部分,因此它可能不适用于他们的系统。 –
非常感谢 –
虽然这段代码可能会回答这个问题,但提供 关于_why_和/或_how_的附加上下文会回答 这个问题会显着改善它的长期 值。请[编辑]你的答案,添加一些解释。 –