在文件中找到带有子网状屏蔽的IP地址



我已经在这个脚本上工作了几天。首先,我被要求仅匹配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

以下是使用ipcalcgrep 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

最新更新