Shell脚本之IP验证


aihuafeng66t
克里斯蒂亚诺诺 2024-01-09 16:29:59 66458 赞同 0 反对 0
分类: 资源
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
————————————————

[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 无效!
————————————————


如果您发现该资源为电子书等存在侵权的资源或对该资源描述不正确等,可点击“私信”按钮向作者进行反馈;如作者无回复可进行平台仲裁,我们会在第一时间进行处理!

评价 0 条
克里斯蒂亚诺诺L1
粉丝 0 资源 831 + 关注 私信
最近热门资源
国产操作系统环境搭建(内含镜像资源链接和提取码)  89
银河麒麟桌面操作系统V10SP1-2403-update1版本中,通过“麒麟管家-设备管理-硬件信息-硬盘”查看硬盘类型时,显示的是HDD(机械硬盘),而实际上该笔记本的硬盘类型为SSD  88
分享几个在日常办公中可以用到的shell脚本  81
以openkylin为例编译安装内核  79
bat脚本生成查看电脑配置\硬件信息  78
常见系统问题及其解决方法  77
分享解决宏碁电脑关机时自动重启的方法  75
统信uosboot区分未挂载导致更新备份失败  69
分享如何解决报错:归档 xxx.deb 对成员 control.tar.zst 使用了未知的压缩,放弃操作  69
统信uos安装mysql的实例参考  63
最近下载排行榜
国产操作系统环境搭建(内含镜像资源链接和提取码) 0
银河麒麟桌面操作系统V10SP1-2403-update1版本中,通过“麒麟管家-设备管理-硬件信息-硬盘”查看硬盘类型时,显示的是HDD(机械硬盘),而实际上该笔记本的硬盘类型为SSD 0
分享几个在日常办公中可以用到的shell脚本 0
以openkylin为例编译安装内核 0
bat脚本生成查看电脑配置\硬件信息 0
常见系统问题及其解决方法 0
分享解决宏碁电脑关机时自动重启的方法 0
统信uosboot区分未挂载导致更新备份失败 0
分享如何解决报错:归档 xxx.deb 对成员 control.tar.zst 使用了未知的压缩,放弃操作 0
统信uos安装mysql的实例参考 0
作者收入月榜
1

prtyaa 收益401.13元

2

zlj141319 收益237.91元

3

哆啦漫漫喵 收益231.75元

4

IT-feng 收益219.92元

5

1843880570 收益214.2元

6

风晓 收益208.24元

7

777 收益173.17元

8

Fhawking 收益106.6元

9

信创来了 收益106.03元

10

克里斯蒂亚诺诺 收益91.08元

请使用微信扫码

添加我为好友,拉您入交流群!

请使用微信扫一扫!