我已经在这个脚本上工作了几天。首先,我被要求仅匹配IP地址,这就是我所做的,现在要求我将IP地址与子网掩码(简短版本)匹配。例如,192.168.2.13/21。此脚本可以很好地匹配无子网掩码的IP地址。问题:如何修改此脚本以将IP地址与子网(/21)掩码匹配,但也可以使用我没有提及的其他子网掩码返回相同的IP地址。例如,如果我输入192.168.2.13/21,如果发现192.168.2.13/19和/或192.168.2.13/22等,它也将返回。这就是我所做的。谢谢你
#!/bin/bash
valid_ip(){
local stat=1
ip="$1"
if [[ $ip =~ [0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}$ ]]; then
OIFS=$IFS
IFS='.'
a=($ip)
IFS=$OIFS
[[ ${a[0]} -le 255 && ${a[1]} -le 255 && ${a[2]} -le 255 && ${a[3]} -le 255 ]]
stat=$?
fi
return $stat
}
red='e[0;31m'
nc='e[0m'
blue='e[0;34m'
yellow='e[1;33m'
echo -e "${red}Type 0 to quit${nc}"
while true; do
echo -e "${yellow}Enter an IP address: ${nc}c"
read ip
if [ $ip == 0 ]; then
echo "Good Bye!!"
break;
elif valid_ip $ip; then
if egrep $ip ips; then
echo $ip >> advertised
echo $ip "is been advertised"
else
echo $ip >> Notadvertised
echo $ip "is not been adversited"
fi
else
echo "Not valid. Please re-enter IP address"
fi
done
以下是使用ipcalc
和grep
PING的修改版本,用于所请求的蒙版内外的任何iPaddress。
#!/bin/bash
red='e[0;31m'
nc='e[0m'
blue='e[0;34m'
yellow='e[1;33m'
echo -e "${red}Type 0 to quit${nc}"
while true; do
echo -e "${yellow}Enter an IP address: ${nc}c"
read ip
if [ $ip == 0 ]; then
echo "Good Bye!!"
break;
elif ipcalc -sc $ip; then
if egrep "$ip/{,1}" ips; then
egrep "$ip/{,1}" ips >> advertised
echo $(egrep "$ip/{,1}" ips) "is been advertised"
else
egrep "$ip{,1}" ips >> Notadvertised
echo $(egrep "$ip/{,1}" ips) "is not been adversited"
fi
else
echo "Not valid. Please re-enter IP address"
fi
done