Given the IP and netmask, how can I calculate the network address using bash?

后端 未结 6 926
耶瑟儿~
耶瑟儿~ 2020-12-24 03:20

In a bash script I have an IP address like 192.168.1.15 and a netmask like 255.255.0.0. I now want to calculate the start address of this network, that means using the &

6条回答
  •  粉色の甜心
    2020-12-24 03:43

    For people who hit this while googling and need an answer that works in ash, the sh that's included in BusyBox and therefore on many routers, here's something for that case:

    IP=10.20.30.240
    MASK=255.255.252.0
    IFS=. read -r i1 i2 i3 i4 << EOF
    $IP
    EOF
    IFS=. read -r m1 m2 m3 m4 << EOF
    $MASK
    EOF
    read masked << EOF
    $(( $i1 & $m1 )).$(( $i2 & $m2 )).$(( $i3 & $m3 )).$(( $i4 & $m4 ))
    EOF
    echo $masked
    

    And here's what to do if you only have the prefix length:

    IP=10.20.30.240
    PREFIX=22
    IFS=. read -r i1 i2 i3 i4 << EOF
    $IP
    EOF
    mask=$(( ((1<<32)-1) & (((1<<32)-1) << (32 - $PREFIX)) ))
    read masked << EOF
    $(( $i1 & ($mask>>24) )).$(( $i2 & ($mask>>16) )).$(( $i3 & ($mask>>8) )).$(( $i4 & $mask ))
    EOF
    echo $masked
    

提交回复
热议问题