如何解决使用 sh 检查 IP 是否属于 IP 范围?
假设我有一个 IP 173.245.50.16,我想检查它是否落入 Cloudflare's IP ranges。这基本上归结为:
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 module。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。