免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: zbs168
打印 上一主题 下一主题

求脚本(给定IP地址和位数,遍历出可用IP地址) [复制链接]

论坛徽章:
1
巨蟹座
日期:2014-06-04 13:33:30
11 [报告]
发表于 2010-03-13 13:48 |只看该作者
  1. root@debian:~/test# ipcalc 192.168.1.1/25|awk  '($1~/HostM/){print $2}'|sed 'N;s/\n/-/'
  2. 192.168.1.1-192.168.1.126
复制代码

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015年亚洲杯之朝鲜
日期:2015-03-13 22:47:33IT运维版块每日发帖之星
日期:2016-01-09 06:20:00IT运维版块每周发帖之星
日期:2016-03-07 16:27:44
12 [报告]
发表于 2010-03-13 14:02 |只看该作者
本帖最后由 blackold 于 2010-03-13 14:03 编辑

回复 11# xiaobaibbb


    向xiaobaibbb学习ipcalc!
  1. ipcalc 192.168.1.1/25|sed '/HostM/!d;N;s/^[^ ]* *\([^ ]*\).*\n[^ ]* *\([^ ]*\).*/\1-\2/'
复制代码

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015年亚洲杯之朝鲜
日期:2015-03-13 22:47:33IT运维版块每日发帖之星
日期:2016-01-09 06:20:00IT运维版块每周发帖之星
日期:2016-03-07 16:27:44
13 [报告]
发表于 2010-03-13 14:24 |只看该作者
还是awk比较明了:
  1. ipcalc 192.168.1.1/25|awk '/HostMin/{printf("%s-",$2)}/HostMax/{print $2}'
复制代码

论坛徽章:
0
14 [报告]
发表于 2010-03-13 16:25 |只看该作者
学习

论坛徽章:
1
巨蟹座
日期:2014-06-04 13:33:30
15 [报告]
发表于 2010-03-13 19:51 |只看该作者
回复 12# blackold


    偶像知道我不咋地还挖苦我!

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015年亚洲杯之朝鲜
日期:2015-03-13 22:47:33IT运维版块每日发帖之星
日期:2016-01-09 06:20:00IT运维版块每周发帖之星
日期:2016-03-07 16:27:44
16 [报告]
发表于 2010-03-13 20:15 |只看该作者
回复 15# xiaobaibbb


    呵呵,我是真心的啊。

论坛徽章:
0
17 [报告]
发表于 2010-03-15 00:40 |只看该作者
我在RH下面ipcalc 192.168.1.1/25 不直接出结果,要加参数。你们用debian ipcalc 192.168.1.1/25 直接出的结果是啥?

论坛徽章:
0
18 [报告]
发表于 2010-03-15 09:48 |只看该作者

  1. #!/bin/bash
  2. function IP2long(){
  3.   local IFS='.'
  4.   read IP1 IP2 IP3 IP4 <<<"$1"
  5.   IP1=$(echo $IP1 | sed 's/^0*//')
  6.   IP1=${IP1:-0}
  7.   IP2=$(echo $IP2 | sed 's/^0*//')
  8.   IP2=${IP2:-0}
  9.   IP3=$(echo $IP3 | sed 's/^0*//')
  10.   IP3=${IP3:-0}
  11.   IP4=$(echo $IP4 | sed 's/^0*//')
  12.   IP4=${IP4:-0}
  13.   echo $((IP1*256*256*256+IP2*256*256+IP3*256+IP4))
  14. }

  15. function long2IP(){
  16.   local IP=$1
  17.   local NET=
  18.   NET=".$(( IP - (IP >> 8 << 8 ) ))${NET}"
  19.   (( IP >>= 8 ))
  20.   NET=".$(( IP - (IP >> 8 << 8 ) ))${NET}"
  21.   (( IP >>= 8 ))
  22.   NET=".$(( IP - (IP >> 8 << 8 ) ))${NET}"
  23.   (( IP >>= 8 ))
  24.   NET="${IP}${NET}"
  25.   echo $NET
  26. }

  27. IFS='/' read IP MASK <<< "$1"

  28. IP=$(IP2long $IP)

  29. i=1

  30. while [ $i -ne $((2**(32-MASK))) ]
  31. do
  32.         echo $(long2IP $((IP+$i)))
  33.         ((i++))
  34. done
复制代码
没有考虑你输入错误问题,比如 输入 192.168.1.1/25 就是不对的,必须输入 192.168.1.0/25 或者 192.168.1.128/25
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP