Chinaunix首页 | 论坛 | 博客
  • 博客访问: 566289
  • 博文数量: 375
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 15
  • 用 户 组: 普通用户
  • 注册时间: 2013-09-20 10:21
文章分类

全部博文(375)

文章存档

2015年(1)

2014年(374)

分类: LINUX

2014-08-18 13:59:36


  1. #!/bin/bash

  2. #function
  3. ntoa(){
  4.     awk '{c=256;print int($0/c^3)"."int($0%c^3/c^2)"."int($0%c^3%c^2/c)"."$0%c^3%c^2%c}' <<<$1
  5. }

  6. aton(){
  7.     awk '{c=256;split($0,ip,".");print ip[4]+ip[3]*c+ip[2]*c^2+ip[1]*c^3}' <<<$1
  8. }

  9. dtom(){
  10.     local i=$((~0))
  11.     ((i<<=(32-$1)))
  12.     echo $i
  13. }

  14. atom(){
  15.     local mask=$(aton $1)
  16.     local i=0
  17.     local n=0
  18.     for((i=31;i>=0;i--)); do
  19.         if [[ $((mask&(1<<$i))) -gt 0 ]]; then
  20.             ((n++))
  21.         fi
  22.     done
  23.     echo $(dtom $n)
  24. }

  25. usage(){
  26.     echo "Usage: -a "
  27.     echo " -m "
  28.     echo " -h README"
  29.     exit
  30. }

  31. #main
  32. [ $# -lt 2 ] && { usage;exit;}

  33. while getopts a:m:h OPTION; do
  34.     case $OPTION in
  35.         a)
  36.             ip=$OPTARG
  37.             ;;
  38.         m)
  39.             netmask=$OPTARG
  40.             ;;
  41.         h)
  42.             usage
  43.             ;;
  44.         esac
  45. done

  46. [[ -z $ip || -z $netmask ]] && usage

  47. ipn=$(aton $ip)

  48. if [[ ${#netmask} -le 2 ]]; then
  49.     mask=$(dtom $netmask)
  50. else
  51.     mask=$(atom $netmask)
  52. fi

  53. subnet=$((ipn&mask))
  54. broadcast=$((~(subnet^mask)))

  55. echo "subnet: $(ntoa $subnet)"
  56. echo "broadcast: $(ntoa $broadcast)"

代码保存为file文件,运行结果:
root@ubuntu:/test# ./file -a 61.128.128.68 -m 25
subnet:  61.128.128.0
broadcast: 61.128.128.127
root@ubuntu:/test# ./file -a 61.128.128.68 -m 255.255.255.128
subnet:  61.128.128.0
broadcast: 61.128.128.127


阅读(1261) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~