Python 检查IP是否在使用NetAddress的IP网络列表中

Python 检查IP是否在使用NetAddress的IP网络列表中,python,ip,cidr,Python,Ip,Cidr,如果没有多个if语句,我很难做到这一点 伪代码: ips = [...a list of around 1000 IPs] cidr_list = ['192.168.10.0/24', '10.10.10.0/24', '192.168.3.0/24'] for ip in ips: if ip in cidr_list: print ip 任何人都知道使用NetAddress的IPAddress和IPNetwork来实现这一点的正确方法吗?您可以使用GoogleIPADR软件包来

如果没有多个if语句,我很难做到这一点

伪代码:

ips = [...a list of around 1000 IPs]
cidr_list = ['192.168.10.0/24', '10.10.10.0/24', '192.168.3.0/24']

for ip in ips:
    if ip in cidr_list: print ip

任何人都知道使用NetAddress的IPAddress和IPNetwork来实现这一点的正确方法吗?

您可以使用Google
IPADR
软件包来实现这一点

pip install ipaddr

从命令行我不能说我以前使用过
netaddr
,但这有用吗

cidrs = map(IPNetwork,cidr_list)
ret = [i for i in ips if IPAddress(i) in cidrs]

我希望这对您有所帮助,即使它是在bash中,而不是在python中

#!/bin/bash

ip_address_list="192.168.10.1 192.168.3.2 10.10.10.111 192.168.100.1"
cider_list="192.168.10.0/24 10.10.10.0/24 192.168.3.0/26"

bin_ip=$(IFS="." ; for i in $ip; do echo "obase=2 ; $i"| bc; done| awk '{printf "%08d", $1}'| cut -c2-)

    for cider in $cider_list ; do
        network_prefix=$(echo $cider |cut -d"/" -f2)
        network_addr=$(echo $cider |cut -d"/" -f1)
        bin_ip=$(IFS="." ; for i in $ip; do echo "obase=2 ; $i"| bc; done| awk '{printf "%08d", $1}'| cut -c2-)

        if [ $(cut -b 1-$network_prefix <<< $bin_ip) = $(cut -b 1-$network_prefix <<< $bin_network_addr) ]; then
            echo  "The IP address $ip is in $network_addr with a network prefix of $network_prefix"
        fi
    done
done
#/bin/bash
ip_地址_list=“192.168.10.1 192.168.3.2 10.10.10.111 192.168.100.1”
苹果酒列表=“192.168.10.0/2410.10.10.0/24192.168.3.0/26”
bin|u ip=$(如果在$ip中为i设置“.”;do echo“obase=2;$i”| bc;done | awk'{printf”%08d“,$1}'| cut-c2-)
对于$cider_列表中的苹果酒;做
网络前缀=$(回声$cider |切-d”/“-f2)
网络地址=$(回声$cider |切-d”/“-f1)
bin|u ip=$(如果在$ip中为i设置“.”;do echo“obase=2;$i”| bc;done | awk'{printf”%08d“,$1}'| cut-c2-)

如果[$(cut-b1-$network\u prefix,您可以使用NetAddress模块中的所有匹配cidrs方法。简单而准确

ips=[ips-if-len(netaddr.all\u-matching\u-cidrs(ip,子网\u-masks))中ip的ip=0]