虚拟IP地址
你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。
虚拟IP地址的作用(VIP)
我们先来了解一下什么是虚拟IP以及虚拟IP有什么作用:
- 虚拟IP地址(Vritual IP Address) ,简称为VIP;
- 定义: 虚拟IP地址(VIP) 是一个不与特定计算机或一个计算机中的网络接口卡(NIC)相连的IP地址;
- VIP的作用:数据包被发送到这个VIP地址,但是所有的数据还是经过真实的网络接口。VIPs大部分用于连接冗余;一个VIP地址也可能在一台计算机或NIC发生故障时可用,交由另一个可选计算机或NIC响应连接。虚拟IP地址的例子如:一个Loopback(无电路IP地址)作为不与在主机或路由器中任何一个特定接口(或电路)相关的IP地址。;
[link]https://baike.baidu.com/item/虚拟IP技术/249265?fr=aladdin
Shell脚本运行图
实现思路
首先,我们的VIP脚本需要获得用户的最高权限获得最高的系统权限sudo -i,这一点需要运行前先获得root权限。下面,我们来看一下具体实现思路:
1.需要获得传入参数;
2.有些参数需要获得额外的描述;
3.shell脚本规范化需要帮助文档,这里面使用-h来帮助用户使用;
4.对应脚本的版本号,-v来显示脚本的当前版本和支持的系统信息;
5.考虑对ip addr的一个简单封装;
6.考虑IP地址的有效范围表示形式,这里面统一考虑IPv4的点分十进制表示法;
7.子网掩码的使用;
获得传入参数
case "$1" in
"-l") #设置本地局域网的IP地址
;;
"-r") #设置非本地局域网的IP地址,随机产生
;;
"-c") #设置网卡
;;
"-d") #删除添加的VIP地址
;;
"-version") #设置版本号
;;
"-h") #设置帮助信息
;;
"restart") #重启网络服务
;;
"*") #错误信息反馈
;;
"--") #结束所有操作
;;
esac
shift
我们通过上面的case语句,就能很好的实现获得每一个参数的信息,对于需要添加参数描述,譬如:-l 192.158.0.100,我们只需要在对应的选项后面加上shift从而跳过192.158.0.100这个非case选项的参数。
case "$1" in
"-l") #设置本地局域网的IP地址
shift ;;
"-r") #设置非本地局域网的IP地址,随机产生
;;
"-c") #设置网卡
;;
"-d") #删除添加的VIP地址
;;
"-version") #设置版本号
;;
"-h") #设置帮助信息
;;
"restart") #重启网络服务
;;
"*") #错误信息反馈
;;
"--") #结束所有操作
;;
esac
shift
为了能够连续获得用户输入的参数,我们考虑使用循环,循环过程中我们对输入的参数利用上面定义的case来甄别。
while [ -n "$1" ]
do
#当参数不为空的时候就开始循环
case "$1" in
...
esac
shift
done
当然,我们还可以在运行时候,判断有多少个参数$#,如果参数少于一个则报警告
if [ "$#" -le 1 ]
then
echo "Please enter the parameter..."
else
#进行循环
fi
如何插入一段漂亮的代码片
去博客设置页面,选择一款你喜欢的代码片高亮样式,下面展示同样高亮的 代码片
.
// An highlighted block
var foo = 'bar';
有些参数需要获得额外描述
对于参数:
1."-l") 需要的参数定义是当前局域网的IP地址;
2."-d") 需要删除的VIP地址;
3.-"c") 需要添加(删除)VIP的网卡
shell脚本规范化需要帮助文档,这里面使用-h来帮助用户使用
编写帮助文档,帮助用户使用时候产生更好的提示作用,当用户查看完帮助文档后通过break跳出整个循环
考虑对ip addr的一个简单封装
Linux 命令中提供了ip add和ip addr 这类命令,目前测试,发现centeros,Ubuntu14以上,kali大部分Linux都有对这个命令的集成,可惜MacOS上没有,还是只能使用ifconfig。
#add the virtual ip address
#-z is mean ${par} is empty
if [ -z ${rpar} ]
then
ip addr add ${par} dev ${var}
else
echo "${rpar}"
ip addr add ${rpar} dev ${var}
fi
判断IP地址是否为空,此处的rpar已经通过子网掩码处理了,例如:192.158.0.100/24,var指的是当前需要设置的网卡
考虑IP地址的有效范围表示形式
IP地址有效范围不超过255 最小为1,但是1是本地回环,因此,不可用,譬如:192.158.0.1。因此,末尾我们需要从2开始但是不超过255,也不要和255相等。
while true
do
if [ ${number} -eq ${par:10} ]
then
${number}=$[$RANDOM%254+2]
else
break
fi
done
使用$RANDOM产生随机数 范围就是2~254。
子网掩码的使用
子网掩码一般为255.255.255.255,因此,我们使用192.158.0.100/24来表示当前这个局域网的网关。
开发Shell VIP
gantt
dateFormat YYYY-MM-DD
title 实现自己的VIP Shell
section 现有任务
思路设计 :done, des1, 2020-04-05
进行中 :active, des2, 2014-01-09, 3d
开发测试 : des3, after des2, 5d
运行实现 : des4, after des3, 5d
GitHub下载地址
快点我,下载吧