知道子网的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
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=''
-
fori 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