在文件中查找带子网掩码的IP地址

时间:2014-01-24 22:43:17

标签: bash

我已经在这个剧本中工作了好几天了。首先我被要求只匹配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

1 个答案:

答案 0 :(得分:1)

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