IP数量就是计算机数量吗,如何利用bash/python计算IP子网容纳计算机数量

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值