Chinaunix

标题: 关于网络掩码的转换 [打印本页]

作者: meteor_rain    时间: 2003-12-25 11:11
标题: 关于网络掩码的转换
我想把“192.168.0.1/255.255.255.0”这样的形式的主机改成“192.168.0.1/24”的形式,请问如何转?如果掩码不规则,比如“255.255.255.128”这样的呢?
作者: xulee    时间: 2003-12-25 11:30
标题: 关于网络掩码的转换
解绫还需系绫人呀,转换成二进制
作者: 網中人    时间: 2003-12-26 02:13
标题: 关于网络掩码的转换
try:
  1. #!/bin/bash

  2. all=(${@//[!0-9]/ })
  3. [ "${#all[@]}" != "8" ] && {
  4.         echo "Usage: "
  5.         echo "${0##*/} ip.ip.ip.ip/mask.mask.mask.mask"
  6.         exit 1
  7. }

  8. get_mask () {
  9.         unset mask
  10.         while [ "$1" ]; do
  11.                 bit=$(echo "obase=2;ibase=10;$1" |bc)
  12.                 shift
  13.                 mask="$mask$bit"
  14.         done
  15.         mask=${mask%%0*}
  16.         echo ${#mask}
  17. }

  18. maskpart=${@##*/}
  19. echo "${@%%/*}/$(get_mask ${maskpart//./ })"
复制代码

作者: 網中人    时间: 2003-12-26 10:01
标题: 关于网络掩码的转换
好人做到底,再送你一個將 25 換成 255.255.255.128 的 script 如何:
  1. #!/bin/bash

  2. all=(${@//[!0-9]/ })
  3. [ "${#all[@]}" != "5" ] || echo ${@##*/} | grep -q '[^0-9]' && {
  4.         echo "Usage: "
  5.         echo "${0##*/} ip.ip.ip.ip/mask_bit"
  6.         exit 1
  7. }

  8. m_bit=${@##*/}

  9. [ "$m_bit" -gt 32 ] && {
  10.         echo "Error: mask ($m_bit) is over range. maximum 32."
  11.         exit 2
  12. }

  13. ones=$((m_bit / 8))
  14. one_mod=$((m_bit % 8))
  15. zeros=$(((32 - m_bit) / 8))

  16. [ "$ones" -ge 1 ] && {
  17.         for ((i=1;i<=$ones;i++)); do
  18.           left=$left.255
  19.         done
  20. }
  21. [ "$one_mod" -ge 1 ] && {
  22.         for ((i=1;i<=$one_mod;i++)); do
  23.           mid_one=${mid_one}1
  24.         done
  25.         for ((i=1;i<=$((8 - one_mod));i++)); do
  26.           mid_zero=${mid_zero}0
  27.         done
  28.         middle=.$(echo "ibase=2;$mid_one$mid_zero" | bc)
  29. }
  30. [ "$zeros" -ge 1 ] && {
  31.         for ((i=1;i<=$zeros;i++)); do
  32.           right=$right.0
  33.         done
  34. }

  35. mask=$left$middle$right
  36. echo "${@%%/*}/${mask#.}"
复制代码


此外,我之前也寫過一個計算 net_id  及 broadcast 的 script ,
若有興趣,一併參考:
http://bbs.chinaunix.net/forum/viewtopic.php?t=196402
作者: meteor_rain    时间: 2003-12-26 10:27
标题: 关于网络掩码的转换
多谢大侠!




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2