shell IP-subnet最长匹配

#!/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 $?
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值