首页 文章

Bash - 以CIDR表示法转换网络掩码?

提问于
浏览
0

示例:我有这个网络掩码:255.255.255.0

在bash中,有一个命令或一个简单的脚本来转换我的网络掩码的符号/ 24?

2 回答

  • 1

    Linux的示例函数:

    IPprefix_by_netmask() {
    #function returns prefix for given netmask in arg1
     ipcalc -p 1.1.1.1 $1 | sed -n 's/^PREFIX=\(.*\)/\/\1/p'
    }
    

    结果:

    $ IPprefix_by_netmask 255.255.255.0
    /24
    

    没有ipcalc的相同功能,在Solaris和Linux中测试过:

    IPprefix_by_netmask() {
        #function returns prefix for given netmask in arg1
        bits=0
        for octet in $(echo $1| sed 's/\./ /g'); do 
             binbits=$(echo "obase=2; ibase=10; ${octet}"| bc | sed 's/0//g') 
             let bits+=${#binbits}
        done
        echo "/${bits}"
    }
    
  • 1
    IPprefix_by_netmask() {
        subnetcalc 1.1.1.1 "$1" -n  | sed -n '/^Netw/{s#.*/ #/#p;q}'
    }
    
    • 在纯 bash 中,将IP转换为长八进制字符串并对其位求和:
    IPprefix_by_netmask () { 
       c=0 x=0$( printf '%o' ${1//./ } )
       while [ $x -gt 0 ]; do
           let c+=$((x%2)) 'x>>=1'
       done
       echo /$c ; }
    

    输出 IPprefix_by_netmask 255.255.255.0 (任一功能):

    /24
    

相关问题