如果我們有一個像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_的附加上下文會回答 這個問題會顯着改善它的長期 值。請[編輯]你的答案,添加一些解釋。 –