https://jiro4989.github.io/tech/2024/04/21/check-ip-cidr.html
cat <<-'EOF' > "ip.txt"
192.166.1.1
192.170.1.1
192.177.1.1
EOF
cat <<-'EOF' > "cidr.txt"
192.168.0.0/13
10.0.0.0/8
EOF
ls -l
cat ip.txt
cat cidr.txt
cat <<-'EOF' > checkcidr.sh
#!/bin/bash
ip_to_int() {
local IFS=.
read -r o1 o2 o3 o4 <<< "$1"
echo $(( (o1 << 24) + (o2 << 16) + (o3 << 8) + o4 ))
}
for ip in $(cat "$1") ; do
for cidr in $(cat "$2") ; do
network="${cidr%/*}"
maskbits="${cidr#*/}"
ip_int=$(ip_to_int "$ip")
network_int=$(ip_to_int "$network")
mask_int=$(( 0xFFFFFFFF << (32 - maskbits) & 0xFFFFFFFF ))
if (( (ip_int & mask_int) == (network_int & mask_int) )); then
echo ip="$ip" cidr="$cidr" "included=yes"
else
echo ip="$ip" cidr="$cidr" "included=no"
fi
done
done
EOF
ls -l
cat checkcidr.sh
chmod 777 checkcidr.sh
./checkcidr.sh ip.txt cidr.txt