知道子网的IP和NETMASK,计算出这个子网可以包含多少台计算机?
1. 子网IP,NETMASK,子网广播IP。子网容量。
知道这三个钟任意两个,都可以得到第三个值,知道这三个值,就可以知道第四个了。例如:192.168.1.22/25。前面是子网IP地址,25是子网掩码,得到所以把22换算成二进制(00010110),其中第一位被分到网络地址里了。剩下的位数改为1,即为子网广播地址(192.168.1.127)。22~127之间且不包括两边值得数量就是计算机数量了。
2. bc对十进制和二进制进行。二进制结果如果不足八位左边补0(IP要求)
-
[huang@huang ~]$ echo 'obase=2; 22' | bc
-
10110
-
[huang@huang ~]$ echo 'ibase=2; 111' | bc
-
7
注意:这里不必再加ibase=10/obase=10,因为系统默认ibase,obase都是十进制。否则会出错!
3. python也可以达到相同功能。使用内置函数int(),bin(),python -c 把二进制和十进制换算。但是要注意bin(),返回前两个字节是0b,和输出结果没有关系。所以最好剔除。
-
[huang@huang ~]$ python -c "print int('01111111',2);"
-
127
-
[huang@huang ~]$ python -c 'print bin(22)' | cut -d'b' -f2
-
10110
4. 用bash写的一个的脚本实例:
-
#!/bin/bash
-
-
# return the number of PC in subnet according to subnet IP and NETMASK
-
# sample: 192.168.1.22/26
-
-
# check the format of $1
-
usage() {
-
echo 'format 192.168.1.1/25'
-
exit 1
-
}
-
-
# check param
-
if [ "$#" == 0 ];then
-
usage
-
elif [ "$#" == 1 ];then
-
echo $1 | grep -qxP '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\/[0-9]{2}' || usage
-
else
-
usage
-
fi
-
-
# calculate the number of PC the subnet can contain
-
nmask=`echo $1 | cut -d\/ -f2`
-
nip=`echo $1 | cut -d\/ -f1`
-
-
# convert 10 base to 2 base
-
nbin=''
-
for i in `echo $nip | cut -d. -f1,2,3,4 --output-delimiter=' '`
-
do
-
ip_part_bin=`echo "obase=2;$i" | bc | tr -d '\n'`
-
num=`echo -n $ip_part_bin | wc -c`
-
-
# add 0 if the count of ip_part is less than 8
-
if [ "$num" -lt 8 ];then
-
let theless=8-"$num"
-
while [ "$num" -lt 8 ]
-
do
-
ip_part_bin=`echo -n "$ip_part_bin" | sed 's/^/0/'`
-
let num+=1
-
done
-
fi
-
nbin+="$ip_part_bin"
-
done
-
-
echo $nbin
输出值是:
-
[nanhuang@nanhuang ~]$ bash binaryip.sh '10.10.10.0/26'
-
00001010000010100000101000000000
阅读(737) | 评论(0) | 转发(0) |