使用sh?检查IP是否落入IP范围



假设我有一个IP 173.245.50.16,我想检查它是否属于Cloudflare的IP范围。这基本上可以归结为:

network_address(173.245.50.16/20) == 173.245.48.0
|| network_address(173.245.50.16/22) == 103.21.244.0
|| ...

对吧?嗯,我不确定这里的术语,但希望你能理解。

这是如何翻译成sh代码的?

我想到了什么:

cf_ip_ranges=`curl -sS https://www.cloudflare.com/ips-v4`
is_cf_ip() {
local ip=$1
local range=$(echo "$cf_ip_ranges" | while IFS= read -r; do
net=${REPLY%/*}
n=${REPLY#*/}
if [ "`ipv4calc --network "$ip/$n"`" = "$net" ]; then
echo "$REPLY"
break
fi
done)
if [ "$range" ]; then
return 0
else
return 1
fi
}
if is_cf_ip 8.8.8.8; then
echo true
else
echo false
fi
if is_cf_ip 173.245.50.16; then
echo true
else
echo false
fi

这里我使用的是Perl的Net::IPv4Addr模块。

最新更新