如果我们有一个IP地址,如192.168.1.168。我们有一个由192.168.1.0/24表示的网络
有没有好的方法(用最少的代码)来确定ip是否属于该网络?
netaddr模型似乎可以,但没有弄清楚是如何做到的。
发布于 2016-05-04 16:45:03
import netaddr
ip = netaddr.IPAddress('192.168.1.168')
network = netaddr.IPNetwork('192.168.1.0/24')
print ip in network
发布于 2016-05-04 16:15:41
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)
https://stackoverflow.com/questions/37021569
复制相似问题