Shell封装虚拟IP地址

虚拟IP地址

支持大部分Linux系统,暂不支持MacOS

虚拟IP地址的作用(VIP)

我们先来了解一下什么是虚拟IP以及虚拟IP有什么作用:

  1. 虚拟IP地址(Vritual IP Address) ,简称为VIP;
  2. 定义: 虚拟IP地址(VIP) 是一个不与特定计算机或一个计算机中的网络接口卡(NIC)相连的IP地址
  3. VIP的作用:数据包被发送到这个VIP地址,但是所有的数据还是经过真实的网络接口。VIPs大部分用于连接冗余;一个VIP地址也可能在一台计算机或NIC发生故障时可用,交由另一个可选计算机或NIC响应连接。虚拟IP地址的例子如:一个Loopback(无电路IP地址)作为不与在主机或路由器中任何一个特定接口(或电路)相关的IP地址。
    [link]https://baike.baidu.com/item/虚拟IP技术/249265?fr=aladdin

Shell脚本运行图

运行帮助界面
新建两个本地局域网VIP
产生外网的VIP

实现思路

首先,我们的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跳出整个循环
VIP帮助文档

考虑对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

2015 2016 2017 2018 2019 2020 思路设计 进行中 开发测试 运行实现 现有任务 实现自己的VIP Shell

GitHub下载地址

快点我,下载吧

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值