#!/bin/bash
function ip_insubnet()
{
ip=$1
subnet_mask=$2
subnet=${subnet_mask%%/*}
mask=${subnet_mask#*/}
arr_ip=(`echo $ip | tr '.' ' '`)
arr_net=(`echo $subnet | tr '.' ' '`)
j=0
for ((i=0; i<4; i++))
do
if (( ${arr_ip[i]} == ${arr_net[i]} ))
then
j=$(expr $j + 8)
if [ $j -ge $mask ]
then
return $mask
fi
else
num_ip=(${arr_ip[i]})
num_net=(${arr_net[i]})
for ((i=7; i>=0; i--))
do
t1=$(((${num_ip} >> i) & 0x01))
t2=$(((${num_net} >> i) & 0x01))
if [ $t1 -ne $t2 ];then
if [ $j -ge $mask ]
then
return $mask
else
return 0
fi
else
j=$(expr $j + 1)
fi
done
fi
done
}
ip_insubnet 1.2.3.127 1.2.3.129/28
echo $?
shell IP-subnet最长匹配
于 2022-06-10 22:04:03 首次发布