如何利用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要求)

  1. [huang@huang ~]$ echo 'obase=2; 22'| bc

  2. 10110

  3. [huang@huang ~]$ echo 'ibase=2; 111'| bc 

  4. 7

注意: 这里不必再加ibase=10/ obase = 10,因为系统默认ibase , obase都是十进制。否则会出错!

3. python也可以达到相同功能。使用内置函数int(),bin(),python -c 把二进制和十进制换算。但是要注意bin(),返回前两个字节是0b,和输出结果没有关系。所以最好剔除。
  1. [huang@huang ~]$ python -"print int('01111111',2);"

  2. 127

  3. [huang@huang ~]$ python -'print bin(22)'| cut -d'b'-f2

  4. 10110


4.  用bash写的一个的脚本实例:
  1. #!/bin/bash


  2. # return the number of PC in subnet according to subnet IP and NETMASK

  3. # sample: 192.168.1.22/26


  4. # check the format of $1

  5. usage(){

  6.        echo 'format 192.168.1.1/25'

  7.        exit 1

  8. }


  9. # check param

  10. if ["$#"== 0 ];then

  11.        usage

  12. elif ["$#"== 1 ];then

  13.        echo $1 | grep -qxP '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\/[0-9]{2}'|| usage

  14. else

  15.        usage

  16. fi


  17. # calculate the number of PC the subnet can contain

  18. nmask=`echo $1 | cut -d\/-f2`

  19. nip=`echo $1 | cut -d\/-f1`


  20. # convert 10 base to 2 base

  21. nbin=''

  22. fori in `echo $nip | cut -d.-f1,2,3,--output-delimiter=' '`

  23. do

  24.        ip_part_bin=`echo "obase=2;$i"| bc |tr-'\n'`

  25.        num=`echo -n $ip_part_bin | wc -c`


  26.        # add 0 if the count of ip_part is less than 8

  27.        if ["$num"-lt 8 ];then

  28.            let theless=8-"$num"

  29.            while ["$num"-lt 8 ]

  30.            do

  31.                ip_part_bin=`echo -"$ip_part_bin"| sed 's/^/0/'`

  32.                let num+=1

  33.            done

  34.        fi

  35.        nbin+="$ip_part_bin"

  36. done


  37. echo $nbin



输出值是:
  1. [nanhuang@nanhuang ~]$ bash binaryip.sh '10.10.10.0/26'

  2. 00001010000010100000101000000000

本文转自大角牛博客51CTO博客,原文链接http://blog.51cto.com/jingshengsun888/1288524如需转载请自行联系原作者

运维的戏子
目录
打赏
0
0
0
0
89
分享
相关文章
|
3月前
|
【10月更文挑战第10天】「Mac上学Python 19」小学奥数篇5 - 圆和矩形的面积计算
本篇将通过 Python 和 Cangjie 双语解决简单的几何问题:计算圆的面积和矩形的面积。通过这道题,学生将掌握如何使用公式解决几何问题,并学会用编程实现数学公式。
173 60
|
1月前
|
Python中的函数是**一种命名的代码块,用于执行特定任务或计算
Python中的函数是**一种命名的代码块,用于执行特定任务或计算
50 18
|
1月前
|
使用Python计算字符串的SHA-256散列值
使用Python计算字符串的SHA-256散列值
41 7
Python程序到计算图一键转化,详解清华开源深度学习编译器MagPy
【10月更文挑战第26天】MagPy是一款由清华大学研发的开源深度学习编译器,可将Python程序一键转化为计算图,简化模型构建和优化过程。它支持多种深度学习框架,具备自动化、灵活性、优化性能好和易于扩展等特点,适用于模型构建、迁移、部署及教学研究。尽管MagPy具有诸多优势,但在算子支持、优化策略等方面仍面临挑战。
93 3
Python技术进阶:动态代理IP的跨境电商解决方案
Python技术进阶:动态代理IP的跨境电商解决方案
|
3月前
|
【10月更文挑战第15天】「Mac上学Python 26」小学奥数篇12 - 图形变换与坐标计算
本篇将通过 Python 和 Cangjie 双语实现图形变换与坐标计算。这个题目帮助学生理解平面几何中的旋转、平移和对称变换,并学会用编程实现坐标变化。
72 1
【10月更文挑战第11天】「Mac上学Python 22」小学奥数篇8 - 排列组合计算
本篇将通过 Python 和 Cangjie 双语讲解如何计算排列与组合。这道题目旨在让学生学会使用排列组合公式解决实际问题,并加深对数学知识和编程逻辑的理解。
73 4
【10月更文挑战第12天】「Mac上学Python 23」小学奥数篇9 - 基础概率计算
本篇将通过 Python 和 Cangjie 双语实现基础概率的计算,帮助学生学习如何解决简单的概率问题,并培养逻辑推理和编程思维。
61 1
【玉米病害识别】Python+卷积神经网络算法+人工智能+深度学习+计算机课设项目+TensorFlow+模型训练
玉米病害识别系统,本系统使用Python作为主要开发语言,通过收集了8种常见的玉米叶部病害图片数据集('矮花叶病', '健康', '灰斑病一般', '灰斑病严重', '锈病一般', '锈病严重', '叶斑病一般', '叶斑病严重'),然后基于TensorFlow搭建卷积神经网络算法模型,通过对数据集进行多轮迭代训练,最后得到一个识别精度较高的模型文件。再使用Django搭建Web网页操作平台,实现用户上传一张玉米病害图片识别其名称。
84 0
【玉米病害识别】Python+卷积神经网络算法+人工智能+深度学习+计算机课设项目+TensorFlow+模型训练
Python 网络编程:端口检测与IP解析
本文介绍了使用Python进行网络编程的两个重要技能:检查端口状态和根据IP地址解析主机名。通过`socket`库实现端口扫描和主机名解析的功能,并提供了详细的示例代码。文章最后还展示了如何整合这两部分代码,实现一个简单的命令行端口扫描器,适用于网络故障排查和安全审计。
60 0
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等