如何查找IP地址是否属于具有python2的网络?

时间:2016-05-04 07:47:45

标签: python-2.7 networking network-programming

如果我们的IP地址如192.168.1.168。我们有一个由192.168.1.0/24代表的网络

有没有一种好方法(最少代码)来确定ip是否属于网络?

模型netaddr似乎可以,但没有弄清楚如何。

2 个答案:

答案 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)