如果我们的IP地址如192.168.1.168。我们有一个由192.168.1.0/24代表的网络
有没有一种好方法(最少代码)来确定ip是否属于网络?
模型netaddr似乎可以,但没有弄清楚如何。
答案 0 :(得分:1)
import netaddr
ip = netaddr.IPAddress('192.168.1.168')
network = netaddr.IPNetwork('192.168.1.0/24')
print ip in network
答案 1 :(得分:0)
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)