免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123下一页
最近访问板块 发新帖
查看: 8058 | 回复: 23
打印 上一主题 下一主题

[网络相关] 求一个shell,根据IP和掩码位计算出网段 [复制链接]

论坛徽章:
1
辰龙
日期:2014-07-24 10:45:20
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-11-09 21:28 |只看该作者 |倒序浏览
请大侠帮忙。

例如:ip和掩码位的文件a.txt:
119.4.0.0/14;
183.0.0.0/10;
182.23.184.0/21;

输出到b.txt,结果为:
119.4.0.0-119.7.255.255
183.0.0.0-183.63.255.255
182.23.184.0-182.23.191.255


论坛徽章:
5
未羊
日期:2014-08-04 16:15:21天秤座
日期:2014-08-13 13:52:372015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:56:112015亚冠之浦和红钻
日期:2015-06-29 15:30:48
2 [报告]
发表于 2012-11-10 00:14 |只看该作者
  1. [root@182 tmp]# cat mask.sh
  2. #!/bin/bash
  3. A=($(echo "$1"|sed 's/[./;]/ /g'))
  4. B=$(echo $((2**(32-${A[4]})-1)))
  5. C=($(echo "obase=256;ibase=10; $B"|bc|awk '{if(NF==4)a=$0;if(NF==3)a="0"$0;if(NF==2)a="0 0"$0;if(NF==1)a="0 0 0"$0;print a}'))
  6. D=$(echo ${A[*]} ${C[*]})
  7. echo $D|awk 'BEGIN{OFS="."}{print $1,$2,$3,$4"-"$1+$6,$2+$7,$3+$8,$4+$9}'
  8. [root@182 tmp]# sh mask.sh 182.23.184.0/21;
  9. 182.23.184.0-182.23.191.255
  10. [root@182 tmp]# sh mask.sh 119.4.0.0/14;
  11. 119.4.0.0-119.7.255.255
  12. [root@182 tmp]# sh mask.sh 183.0.0.0/10;
  13. 183.0.0.0-183.63.255.255
复制代码
凑合能用。。。。。。

论坛徽章:
0
3 [报告]
发表于 2012-11-10 00:50 |只看该作者
  1. sed "h;s#^#dc -e '0 #;s#\.# +256*#g;s#/#+2 32 #;s#;#-^1-+4[r256~psrr1-d0<x]dsxx'#e;s#\n#.#g;x;G;s#/.*\n#-#" a.txt > b.txt
复制代码

论坛徽章:
0
4 [报告]
发表于 2012-11-10 01:08 |只看该作者
本帖最后由 qq312873977 于 2012-11-10 12:11 编辑

凑合着看吧
  1. #!/bin/bash
  2. #usage:$0 ip/mask"

  3. ip=`echo $1|cut -d '/' -f1`
  4. arr=( `echo $ip| tr '.' ' '` )
  5. mask=`echo $1 | cut -d '/' -f2`
  6. arrIndex=$(( (mask+7)/8 ))
  7. bitnum=$(( mask%8 ))
  8. ((mask%8 == 0)) && bitnum=8
  9. binStr=`echo "obase=2;${arr[arrIndex-1]}" | bc -l`
  10. binStr=`printf %08s $binStr|awk -F '' '{for(i='$bitnum'+1;i<9;i++) $i=1}1'|tr -d ' '`
  11. arr[arrIndex-1]=`echo "ibase=2;$binStr" | bc -l`
  12. for i in `seq $arrIndex 3`;do arr[$i]=255;done
  13. echo $ip-"${arr[@]}"|tr ' ' '.'
复制代码

论坛徽章:
32
处女座
日期:2013-11-20 23:41:20双子座
日期:2014-06-11 17:20:43戌狗
日期:2014-06-16 11:05:00处女座
日期:2014-07-22 17:30:47狮子座
日期:2014-07-28 15:38:17金牛座
日期:2014-08-05 16:34:01亥猪
日期:2014-08-18 13:34:25白羊座
日期:2014-09-02 15:03:55金牛座
日期:2014-11-10 10:23:58处女座
日期:2014-12-02 09:17:52程序设计版块每日发帖之星
日期:2015-06-16 22:20:002015亚冠之塔什干火车头
日期:2015-06-20 23:28:22
5 [报告]
发表于 2012-11-10 01:32 |只看该作者
本帖最后由 yestreenstars 于 2012-11-10 01:38 编辑

Try:
  1. #!/bin/bash
  2. while read line
  3. do
  4.         netmask=$(sed -r 's/.*\/(.*);/\1/' <<< $line)
  5.         start=$(sed -r 's/(.*)\/.*/\1/' <<< $line)
  6.         if [[ "$netmask" -lt "8" ]]; then
  7.                 end=$(awk 'BEGIN{FS=OFS="."}{print $1+2^(8-'$netmask')-1,255,255,255}' <<< $line)
  8.         elif [[ "$netmask" -lt "16" ]];then
  9.                 end=$(awk 'BEGIN{FS=OFS="."}{print $1,$2+2^(16-'$netmask')-1,255,255}' <<< $line)
  10.         elif [[ "$netmask" -lt "24" ]];then
  11.                 end=$(awk 'BEGIN{FS=OFS="."}{print $1,$2,$3+2^(24-'$netmask')-1,255}' <<< $line)
  12.         else
  13.                 end=$(awk 'BEGIN{FS="[./]";OFS="."}{print $1,$2,$3,$4+2^(32-'$netmask')-1}' <<< $line)
  14.         fi
  15.         echo $start-$end >> b.txt
  16. done < a.txt
复制代码

论坛徽章:
3
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:51:162015年亚洲杯之阿曼
日期:2015-04-07 20:00:59
6 [报告]
发表于 2012-11-10 03:16 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
3
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:51:162015年亚洲杯之阿曼
日期:2015-04-07 20:00:59
7 [报告]
发表于 2012-11-10 03:18 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
1
辰龙
日期:2014-07-24 10:45:20
8 [报告]
发表于 2012-11-10 08:19 |只看该作者
感谢各位大牛,现在就试试!

论坛徽章:
1
辰龙
日期:2014-07-24 10:45:20
9 [报告]
发表于 2012-11-10 08:25 |只看该作者
回复 3# hbmhalley


    结果怎么是这样的呢?反了:
119.4.0.0-255.255.7.119
183.0.0.0-255.255.63.183
182.23.184.0-255.191.23.182

论坛徽章:
1
辰龙
日期:2014-07-24 10:45:20
10 [报告]
发表于 2012-11-10 08:28 |只看该作者
回复 5# yestreenstars


    测试通过!

119.4.0.0-119.7.255.255
183.0.0.0-183.63.255.255
182.23.184.0-182.23.191.255
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP