一、需求说明
我们在编写网络相关脚本的时候,尝尝会遇到需要判断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
}
[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 无效!
————————————————
如果您发现该资源为电子书等存在侵权的资源或对该资源描述不正确等,可点击“私信”按钮向作者进行反馈;如作者无回复可进行平台仲裁,我们会在第一时间进行处理!
添加我为好友,拉您入交流群!
请使用微信扫一扫!