Shell封装虚拟IP地址

作者: Bryant_7832 | 来源:发表于2020-04-05 11:43 被阅读0次

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

        本文链接:https://www.haomeiwen.com/subject/pvxuphtx.html