2014-04-21 42 views
0

我無法在沒有多個if語句的情況下執行此操作。使用netaddr檢查IP是否在IPNetworks列表中

僞代碼:

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 

人知道正確的方式來做到這一點使用ip地址和IPNetwork從netaddr中?

回答

0

您可以使用谷歌ipaddr包爲

pip install ipaddr 

命令行

0

不能說我曾經使用過netaddr,但工作的呢?

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

我希望這可以幫助你,即使它是在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