
linux shell 如何把1.0.32.0/19 这个IP 段的IP 输出来呢?
1.0.32.0/19这个IP段的范围是1.0.32.1-1.0.63.2541.1.0.0/24这个IP段的范围是1.1.0.1-1.1.0.254我就想把1.0.32...
1.0.32.0/19 这个IP 段的范围是 1.0.32.1 - 1.0.63.254
1.1.0.0/24 这个IP 段的范围是 1.1.0.1 - 1.1.0.254
我就想把 1.0.32.0/19 这里边的IP 像以下格式一行行输出来
1.0.32.1
1.0.32.2
1.0.32.3
1.0.32.4
………………
1.0.63.254
这里边用shell 实现,用sipcalc 可以计算出 1.0.32.0/19 它的范围,但无法一个个IP 输出来,有没有网友帮助下?谢谢。
补充:
看了两位网友的回复,真的是非常感谢,但是这里有一个问题,我没有说清楚。我并不是想处理一两个IP ,而是处理很多。
在linux 下的一个文件 ip.txt 里边保存了很多IP段,我想都处理,这个shell 该如何实现 ?
ip.txt
1.0.32.0/19
1.0.1.0/24
1.0.2.0/23
1.0.8.0/21
1.1.0.0/24
1.1.2.0/23
1.1.4.0/22
1.1.8.0/21
1.1.16.0/20
1.1.32.0/19
1.2.0.0/23
1.2.5.0/24
1.2.6.0/23
1.2.9.0/24
1.2.10.0/23
1.2.12.0/22
1.2.16.0/20
1.2.32.0/19
1.2.64.0/18
1.3.0.0/16
1.4.1.0/24
1.10.32.0/19
里边有这么多内容,如何把它们转换成一个个IP 输出来呢? 展开
1.1.0.0/24 这个IP 段的范围是 1.1.0.1 - 1.1.0.254
我就想把 1.0.32.0/19 这里边的IP 像以下格式一行行输出来
1.0.32.1
1.0.32.2
1.0.32.3
1.0.32.4
………………
1.0.63.254
这里边用shell 实现,用sipcalc 可以计算出 1.0.32.0/19 它的范围,但无法一个个IP 输出来,有没有网友帮助下?谢谢。
补充:
看了两位网友的回复,真的是非常感谢,但是这里有一个问题,我没有说清楚。我并不是想处理一两个IP ,而是处理很多。
在linux 下的一个文件 ip.txt 里边保存了很多IP段,我想都处理,这个shell 该如何实现 ?
ip.txt
1.0.32.0/19
1.0.1.0/24
1.0.2.0/23
1.0.8.0/21
1.1.0.0/24
1.1.2.0/23
1.1.4.0/22
1.1.8.0/21
1.1.16.0/20
1.1.32.0/19
1.2.0.0/23
1.2.5.0/24
1.2.6.0/23
1.2.9.0/24
1.2.10.0/23
1.2.12.0/22
1.2.16.0/20
1.2.32.0/19
1.2.64.0/18
1.3.0.0/16
1.4.1.0/24
1.10.32.0/19
里边有这么多内容,如何把它们转换成一个个IP 输出来呢? 展开
3个回答
展开全部
#!/bin/bash
#脚本名称:test.sh
#使用方法:./test.sh ip.txt
#备注:自动生成以IP范围命名的.txt文件
while read IPRANGE
do
IP_FILE_NAME=$(echo $IPRANGE | cut -d/ -f1)
IP_1="$(echo $IPRANGE | cut -d"." -f1-2)."
IP_3="$(echo $IPRANGE | cut -d"." -f3)"
MAX_IP_3="$(sipcalc $IPRANGE | awk -F. '/Usable range/{print $6}')"
for i in $(seq $IP_3 $MAX_IP_3)
do
for j in $(seq 1 254)
do
touch $IP_FILE_NAME.txt
echo "${IP_1}${i}.${j}" >>$IP_FILE_NAME.txt
done
done
done < $1
展开全部
python版:
#!/usr/bin/env python
def ip2num(ip):
ip3, ip2, ip1, ip0 = ip.split('.')
return int(ip3) << 24 | int(ip2) << 16 | int(ip1) << 8 | int(ip0)
def num2ip(num):
return '%s.%s.%s.%s' % (num >> 24 & 0xff, num >> 16 & 0xff,
num >> 8 & 0xff, num & 0xff)
network = '1.0.32.0'
mask = 19
write_able = 32 - mask
start = (ip2num(network) >> write_able) << write_able
i = 0
while i < 2 ** write_able - 1:
i += 1
print num2ip(start+i)
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#!/bin/ksh
#输出来是什么意思?打印到屏幕上?
for((i=1;i<=63;i++))
do
for((x=1;x<=254;x++))
do
echo "1.0."$i"."$x
done
done
#have a try dude...
更多追问追答
追问
追答
#ip.txt里面是什么样的?
more ip.txt #打印出来看看
#另外,你是想从ip.txt这个文件里把IP地址都提取出来,做其他处理吗,还是要怎样?
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询