Shell脚本之IP验证

一、需求说明

  我们在编写网络相关脚本的时候,尝尝会遇到需要判断IP地址是否合法的问题,需要知道输入的IP地址是否为一个正确的IP地址。又或者我们需要知道IP地址是公网IP地址还是私网IP地址。此博文就是为了满足这个需求而编写,用于验证输入的IP地址是否合法,入IP地址格式错误返回1,输入正确可用IP(公网、私网)返回0,输入环回口IP、组播IP等返回2。输入常见的特殊IP地址也会告知验证结果。关于IP地址的介绍见博文TCP/IP之IP协议及IP地址详解

二、脚本内容

#!/bin/bash
#script name: ipcheck.sh
#author: wuhs
#version: v1
#date: 2022-05-18
#description: 此脚本用于验证输入IP地址是否为有效IP地址
#description: 输入IP地址格式错误返回1,输入正确可用IP(公网、私网)返回0,输入环回口IP、组播IP等返回2

#函数定义
function ipcheck(){
  local IP=$1
  VALID_CHECK=$(echo $IP|awk -F. '$1<=255&&$2<=255&&$3<=255&&$4<=255{print "yes"}')
  if echo $IP|grep -E "^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$" >/dev/null;then
    if [[ $VALID_CHECK = "yes" ]];then
      echo "$IP 满足IP格式数字要求"
      p1=$(echo $IP|cut -d. -f1)
      p2=$(echo $IP|cut -d. -f2)
      p3=$(echo $IP|cut -d. -f3)
      p4=$(echo $IP|cut -d. -f4)
      if [ $p1 == 127 ];then
        echo "$IP 是一个环回口地址"
        return 2
      elif [ $p1==169 -a $p2 == 254 ];then
        echo "$IP 是一个自动专用IP地址,window终端在DHCP获取地址失败时分配的地址"
        return 2
      elif [ $p1 == 0 -a $p2 == 0 -a $p3 == 0 -a $p4 == 0 ];then
        echo "$IP 表示任意地址,用于配置默认路由"
        return 2
      elif [ $p1 == 255 -a $p2 == 255 -a $p3 == 255 -a $p4 == 255 ];then
        echo "$IP 表示限制广播地址"
        return 2
      elif [ $p1 -ge 224 -a $p1 -le 239 ];then
        echo "$IP 是一个D类地址,用于组播"
        return 2
      elif [ $p1 -ge 240 -a $p1 -le 247 ];then
        echo "$IP 是一个E类地址,属于实验室保留地址"
        return 2
      elif [ $p1 == 0 -a $p4 == 255 ];then
        echo "$IP 可能是一个反向掩码"
        return 2
      elif [ $p1 == 10 ];then
        echo "$IP 是一个私网IP地址"
        return 0
      elif [ $p1 == 172 -a $p2 -ge 16 -a $p2 -le 31 ];then
        echo "$IP 是一个私网IP地址"
        return 0
      elif [ $p1 == 192 -a $p2 == 168 ];then
        echo "$IP 是一个私网IP地址"
        return 0
      elif [ $p1 != 0 ];then
        echo "$IP 是一个公网IP地址"
        return 0
      else
        echo "$IP 无效!"
        return 1
      fi
    else
      echo "$IP 无效,请检查并重新输入!"
      return 1
    fi
  else
    echo "格式错误,请重新输入!"
    return 1
  fi
}

#带IP参数执行脚本则执行检查参数IP是否正确,否则弹窗要求出入IP
if [ $# == 0 ]; then
  while true;
  do
    read -p "请输入待检查IP: " IP
    ipcheck $IP
    [ $? -ne 1 ] && break || continue
  done
else
  ipcheck $1
fi

三、使用示例

1、无参数执行脚本

在这里插入图片描述

[root@s146 ipcheck]# ./ipcheck.sh
请输入待检查IP: a.b.c.c
格式错误,请重新输入!
请输入待检查IP: 100.200.300.400
100.200.300.400 无效,请检查并重新输入!
请输入待检查IP: 1.1.1.1
1.1.1.1 满足IP格式数字要求
1.1.1.1 是一个公网IP地址

2、带参数执行脚本

[root@s146 ipcheck]# ./ipcheck.sh 2.2.2.2
2.2.2.2 满足IP格式数字要求
2.2.2.2 是一个公网IP地址

3、验证环回口IP

[root@s146 ipcheck]# ./ipcheck.sh 127.0.0.3
127.0.0.3 满足IP格式数字要求
127.0.0.3 是一个环回口地址
[root@s146 ipcheck]# ./ipcheck.sh 127.0.0.253
127.0.0.253 满足IP格式数字要求
127.0.0.253 是一个环回口地址

4、验证window自动专用IP

[root@s146 ipcheck]# ./ipcheck.sh 169.254.1.1
169.254.1.1 满足IP格式数字要求
169.254.1.1 是一个自动专用IP地址,window终端在DHCP获取地址失败时分配的地址

5、验证私网IP

[root@s146 ipcheck]# ./ipcheck.sh 10.20.30.40
10.20.30.40 满足IP格式数字要求
10.20.30.40 是一个私网IP地址
[root@s146 ipcheck]# ./ipcheck.sh 172.16.100.1
172.16.100.1 满足IP格式数字要求
172.16.100.1 是一个私网IP地址
[root@s146 ipcheck]# ./ipcheck.sh 192.168.200.100
192.168.200.100 满足IP格式数字要求
192.168.200.100 是一个私网IP地址

6、验证组播IP

[root@s146 ipcheck]# ./ipcheck.sh 224.0.0.5
224.0.0.5 满足IP格式数字要求
224.0.0.5 是一个D类地址,用于组播
[root@s146 ipcheck]# ./ipcheck.sh 224.0.0.6
224.0.0.6 满足IP格式数字要求
224.0.0.6 是一个D类地址,用于组播

7、其他特殊IP地址验证

[root@s146 ipcheck]# ./ipcheck.sh 0.0.0.0
0.0.0.0 满足IP格式数字要求
0.0.0.0 表示任意地址,用于配置默认路由
[root@s146 ipcheck]# ./ipcheck.sh 255.255.255.255
255.255.255.255 满足IP格式数字要求
255.255.255.255 表示限制广播地址
[root@s146 ipcheck]# ./ipcheck.sh 0.0.0.255
0.0.0.255 满足IP格式数字要求
0.0.0.255 可能是一个反向掩码
[root@s146 ipcheck]# ./ipcheck.sh 247.1.2.3
247.1.2.3 满足IP格式数字要求
247.1.2.3 是一个E类地址,属于实验室保留地址
[root@s146 ipcheck]# ./ipcheck.sh 0.0.10.2
0.0.10.2 满足IP格式数字要求
0.0.10.2 无效!

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

恒悦sunsite

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值