Shell封装虚拟IP地址

虚拟IP地址

你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。

虚拟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

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下载地址

快点我,下载吧

你可能感兴趣的:(Shell封装虚拟IP地址)