如何验证IP地址范围(Shell脚本)

时间:2019-02-18 18:29:11

标签: bash shell scripting

我试图弄清楚如何编辑此脚本,以便它将验证IP范围而不是仅一个IP,即192.168.1.0/24。

echo "Target IP Address range or specific IP: "
read IPaddr

#IPv4 Validation
is_ip(){
local ip=$1

if expr "$ip" : '[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*$' >/dev/null;then
    for i in 1 2 3 4;do
        if [ $(echo "$ip" | cut -d. -f$i) -gt 255 ];then
            return 1
        fi
    done
    return 0
else
    return 1
fi
}
#Test User-inputted IPv4 Address
is_ip "$IPaddr"
if [[ $? -eq 0 ]]; then
    echo "Valid IP address/range"
else
    echo "Invalid IPv4"
    exit 6
fi

1 个答案:

答案 0 :(得分:-2)

如果我正确理解了您的问题,那么此脚本似乎可以满足您的要求。

#!/bin/bash

locInput="$1"

locIP=${locInput%\/*}
if [[ $locInput = @(*/*) ]];then
        locRange=${locInput#*\/}
fi

function is_ip
{
if [[ $locIP == ?([0-9])+([0-9])\.?([0-9])+([0-9])\.?([0-9])+([0-9])\.?([0-9])+([0-9]) ]]; then
        locVerif=(${locIP//./ })
        for i in ${locVerif[*]}; do
                if [[ $i -lt 0 || $i -gt 255 ]]; then
                        return 1
                fi
        done
        if [[ -n $locRange && ($locRange -lt 0 || $locRange -gt 31) ]]; then
                return 1
        fi
        return 0
else
        return 1
fi

}

is_ip
if [[ $? -eq 1 ]]; then
        echo "Wrong IP/Range"
else
        echo "Good IP/Range"
fi

希望它可以提供帮助。