2014-01-24 113 views
0

我已經在這個腳本中工作了幾天。首先,我被要求只匹配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等。這就是我所做的。謝謝在文件中查找帶子網掩碼的IP地址

#!/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

爲什麼不使用ipcalc來驗證IP地址?它位於initscripts包中,您可能已安裝它。然後你可以grep for'$ {ip}/{,1}'而不管掩碼和'/'是否可選。 – alvits

回答

1

下面是和請求蒙版之外使用ipcalcgrep平對任何ip地址腳本的修改版本。

#!/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 
+0

非常感謝。 –

+0

非常歡迎。 – alvits