IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> shell脚本之IP计算器 -> 正文阅读

[系统运维]shell脚本之IP计算器

作者:_110

一、需求说明

??在CSDN问答区经常有学生提问关于IP地址计算的问题,这种题型无非就是根据IP地址和掩码计算网络地址、广播地址、地址掩码、可用地址范围、可用主机数量。其实关于这些我在博文TCP/IP之IP协议及IP地址详解中诊断IP地址的规划和计算做了详细的说明。只要你读懂了这篇博文我相信计算IP地址对广大学生来说应该不是什么难事。如果嫌自己计算麻烦,此脚本可以帮你一次计算出所有结果。为了完成IP计算器脚本主要需要解决IP验证、进制转换、位数补齐等的问题。
??此博文是在前两篇博文Shell脚本之IP验证Shell脚本之进制转换器的基础上完成的,如果有觉得不清楚的地方很可能是你需要先读一下如上两篇博文。

二、脚本内容

#!/bin/bash
#script name: ipcalculate.sh
#author: wuhs
#version: v1
#date: 2022-05-20
#description: 此脚本用于根据IP地址和掩码位数计算网络地址、掩码、广播地址、可用地址范围、可用主机数量

#参数定义
net="192.168.0.0"
mask="255.255.255.0"
broadcast="192.168.0.255"
hostcount="254"

#获取IP地址
IP=$1
#获取掩码位数
maskm=$2
#获取主机位数
let n=32-$maskm

#定义一个函数,主要是为了解决二进制IP到点分十进制的转换,输入32的二进制字符串,打印点分十进制IP
function toip(){
  ipc=$1
  local p1=$(echo $ipc|cut -c -8)
  p1=`echo "obase=10;ibase=2;$p1" |bc`
  local p2=$(echo $ipc|cut -c 9-16)
  p2=`echo "obase=10;ibase=2;$p2" |bc`  
  local p3=$(echo $ipc|cut -c 17-24)
  p3=`echo "obase=10;ibase=2;$p3" |bc`  
  local p4=$(echo $ipc|cut -c 25-32)
  p4=`echo "obase=10;ibase=2;$p4" |bc`  
  ipc="$p1.$p2.$p3.$p4"
  echo $ipc
}

#先调用IP验证器验证输入的IP地址是否合规
. ./ipcheck.sh $IP

#IP输入合规则继续执行,输入错误则退出
if [ $? -eq 0 ];then
  p1=$(echo $IP|cut -d. -f1)
  p2=$(echo $IP|cut -d. -f2)
  p3=$(echo $IP|cut -d. -f3)
  p4=$(echo $IP|cut -d. -f4)
  #echo $p1 $p2 $p3 $p4
elif [ $? -eq 1 ];then
  echo "IP地址格式输入错误"
  exit
elif [ $? -eq 2 ];then
  echo "IP地址为特殊类型IP,此脚本仅用于计算公网或者内网IP地址。"
  exit
fi

#获取IP地址各段二进制值
p12=`echo "obase=2;ibase=10;$p1" |bc`
p12=`printf "%08d\n" $p12`
p22=`echo "obase=2;ibase=10;$p2" |bc`
p22=`printf "%08d\n" $p22`
p32=`echo "obase=2;ibase=10;$p3" |bc`
p32=`printf "%08d\n" $p32`
p42=`echo "obase=2;ibase=10;$p4" |bc`
p42=`printf "%08d\n" $p42`
IP2="$p12$p22$p32$p42"

#验证输入掩码位数参数是否合规
if [ $maskm -ge 1 -a $maskm -le 32 ];then
  echo -e "\e[32m掩码位数:$maskm 输入合规 \e[0m "
else
  echo -e "\e[31m掩码位数:$maskm 输入不合规,要求输入1-32之间数值 \e[0m "
  exit
fi

#获取网络地址
netw=`echo $IP2|cut -c -$maskm`
#获取主机位
let nn=$maskm+1
host=`echo $IP2|cut -c $nn-`
#将主机位全部转换为0,得到地址段网络地址
host=`echo $host| sed 's/1/0/g'`
#将主机位全部转换为1,得到地址段广播地址
brod=`echo $host| sed 's/0/1/g'`
#拼接二进制网络地址
net="$netw$host"
#拼接二进制广播地址
broadcast="$netw$brod"
#echo $broadcast
#获取网段第1个可用地址
fhost=`echo $host|sed 's/0$/1/g'`
fhost="$netw$fhost"
#获取网段最后1个可用地址
lhost=`echo $brod|sed 's/1$/0/g'`
lhost="$netw$lhost"
#获取掩码
mask=`echo $netw|sed 's/0/1/g'`
mask="$mask$host"

echo "地址$IP 计算结果如下:"
echo -e "网络地址是:\e[32m `toip $net` \e[0m"
echo -e "地址掩码是:\e[32m `toip $mask` \e[0m"
echo -e "广播地址是:\e[32m `toip $broadcast` \e[0m"
echo -e "可用地址范围是:\e[32m `toip $fhost` - `toip $lhost` \e[0m"

let hostcount=(2**$n-2)
echo -e "可用主机数量是:\e[32m $hostcount \e[0m"

三、使用示例

1、常规A/B/C类地址计算

在这里插入图片描述

[root@s146 ipcheck]# ./ipcalculate.sh 192.168.100.100 24
192.168.100.100 满足IP格式数字要求
192.168.100.100 是一个私网IP地址
掩码位数:24 输入合规
地址192.168.100.100 计算结果如下:
网络地址是: 192.168.100.0
地址掩码是: 255.255.255.0
广播地址是: 192.168.100.255
可用地址范围是: 192.168.100.1 - 192.168.100.254
可用主机数量是: 254

2、输入IP地址不合规

在这里插入图片描述

#此脚本仅用于计算通用的私网和公网IP地址,对应环回口IP、专有IP、组播地址等不做计算,虽然公式是通用的,但是这些IP地址是有特殊用途的,通用计算没有实际意义。
[root@s146 ipcheck]# ./ipcalculate.sh 192.168.100.10a 24
格式错误,请重新输入!
IP地址格式输入错误
[root@s146 ipcheck]# ./ipcalculate.sh 127.0.0.1 24
127.0.0.1 满足IP格式数字要求
127.0.0.1 是一个环回口地址
IP地址格式输入错误

3、掩码输入不合规

在这里插入图片描述

[root@s146 ipcheck]# ./ipcalculate.sh 192.168.0.1 33
192.168.0.1 满足IP格式数字要求
192.168.0.1 是一个私网IP地址
掩码位数:33 输入不合规,要求输入1-32之间数值

4、可变长子网掩码VLSM计算

在这里插入图片描述

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2022-06-16 21:53:05  更:2022-06-16 21:53:34 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/18 22:47:56-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码