免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2635 | 回复: 9

[学习共享] shell实现IP地址的计算和求网络地址与广播地址 [复制链接]

论坛徽章:
3
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:51:162015年亚洲杯之阿曼
日期:2015-04-07 20:00:59
发表于 2013-07-04 22:32 |显示全部楼层
本帖最后由 zooyo 于 2013-07-05 10:42 编辑
  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 <IP>"
  27.         echo "       -m <NETMASK>"
  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文件,运行结果:
  1. root@ubuntu:/test# ./file -a 61.128.128.68 -m 25
  2. subnet:  61.128.128.0
  3. broadcast: 61.128.128.127
  4. root@ubuntu:/test# ./file -a 61.128.128.68 -m 255.255.255.128
  5. subnet:  61.128.128.0
  6. broadcast: 61.128.128.127
复制代码
可以针对IP地址字符串转换为整形后,按十进制增加IP数量, 再转换成字符串打印, 实现IP地址的加减运算.

论坛徽章:
50
15-16赛季CBA联赛之广夏
日期:2018-11-05 09:42:462015年亚冠纪念徽章
日期:2015-07-23 11:58:122015亚冠之广州富力
日期:2015-07-07 08:26:172015亚冠之塔什干棉农
日期:2015-06-29 09:08:072015年亚洲杯之伊朗
日期:2015-03-08 20:51:012015年迎新春徽章
日期:2015-03-04 09:58:11未羊
日期:2014-10-16 22:41:47处女座
日期:2014-10-16 15:33:33酉鸡
日期:2014-03-13 12:54:10巳蛇
日期:2014-03-10 14:39:052015亚冠之德黑兰石油
日期:2015-07-29 12:46:372015亚冠之德黑兰石油
日期:2015-08-07 12:54:11
发表于 2013-07-04 22:44 |显示全部楼层
谢谢zooyo版大分享,先顶后看~

论坛徽章:
3
金牛座
日期:2013-08-26 10:25:02摩羯座
日期:2013-09-09 15:14:322015年亚洲杯之约旦
日期:2015-05-06 09:33:56
发表于 2013-07-04 22:47 |显示全部楼层
好利害的样子。收藏先。)

论坛徽章:
28
ChinaUnix元老
日期:2015-02-02 08:55:39CU十四周年纪念徽章
日期:2019-08-20 08:30:37
发表于 2013-07-05 08:39 |显示全部楼层
学习了

论坛徽章:
8
摩羯座
日期:2014-11-26 18:59:452015亚冠之浦和红钻
日期:2015-06-23 19:10:532015亚冠之西悉尼流浪者
日期:2015-08-21 08:40:5815-16赛季CBA联赛之山东
日期:2016-01-31 18:25:0515-16赛季CBA联赛之四川
日期:2016-02-16 16:08:30程序设计版块每日发帖之星
日期:2016-06-29 06:20:002017金鸡报晓
日期:2017-01-10 15:19:5615-16赛季CBA联赛之佛山
日期:2017-02-27 20:41:19
发表于 2013-07-05 09:11 |显示全部楼层
牛!学习了!

论坛徽章:
0
发表于 2013-07-05 09:44 |显示全部楼层
雁过留名,各种mark!

论坛徽章:
0
发表于 2013-07-05 11:11 |显示全部楼层
刘明,马克

论坛徽章:
2
水瓶座
日期:2014-08-20 14:38:50辰龙
日期:2014-09-15 15:49:06
发表于 2013-07-05 11:12 |显示全部楼层
强啊!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

论坛徽章:
92
CU大牛徽章
日期:2013-11-29 22:26:36CU大牛徽章
日期:2014-02-21 14:21:56CU十二周年纪念徽章
日期:2014-02-21 14:22:02CU大牛徽章
日期:2014-02-21 14:22:07CU大牛徽章
日期:2014-02-21 14:22:09CU大牛徽章
日期:2015-02-28 17:45:342015元宵节徽章
日期:2015-03-06 16:56:38羊年新春福章
日期:2015-02-28 17:42:522015七夕节徽章
日期:2015-09-14 09:24:55CU大牛徽章
日期:2014-02-21 14:22:44CU大牛徽章
日期:2015-02-28 17:48:12CU大牛徽章
日期:2015-02-28 17:47:58
发表于 2013-07-05 16:56 |显示全部楼层
我K,不明觉厉啊!

论坛徽章:
5
CU十四周年纪念徽章
日期:2016-06-30 00:03:1415-16赛季CBA联赛之天津
日期:2016-12-27 16:24:1415-16赛季CBA联赛之辽宁
日期:2017-03-14 15:38:3515-16赛季CBA联赛之江苏
日期:2017-03-14 17:09:4815-16赛季CBA联赛之青岛
日期:2017-04-04 16:15:48
发表于 2016-11-04 11:36 |显示全部楼层
顶....
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

SACC2019中国系统架构师大会

【数字转型 架构演进】SACC2019中国系统架构师大会,7折限时优惠重磅来袭!
2019年10月31日~11月2日第11届中国系统架构师大会(SACC2019)将在北京隆重召开。四大主线并行的演讲模式,1个主会场、20个技术专场、超千人参与的会议规模,100+来自互联网、金融、制造业、电商等领域的嘉宾阵容,将为广大参会者提供一场最具价值的技术交流盛会。

限时七折期:2019年8月31日前


----------------------------------------

大会官网>>
  

北京盛拓优讯信息技术有限公司. 版权所有 16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122
中国互联网协会会员  联系我们:huangweiwei@it168.com
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP