#!/bin/bash
if [ $UID -ne 0 ];then echo "Your are not the root ....";exit 1fiif [ $# -ne 2 ];then echo "Usage: $0 10.1.1.1 255.255.255.0";exit -1fiJudge(){ num=`echo $1| grep -o '\.'|wc -l`[ "$num" -ne 3 ]&&(echo " Error : It is not userful....") }Turn10to2(){ OB=`echo "obase=2;ibase=10;$1"|bc`echo $OB}Turn2to10(){ OB=`echo "obase=10;ibase=2;$1"|bc`echo $OB}rmfile(){ rm -fr /mnt/ipaddress.logrm -fr /mnt/netmask.logrm -fr /mnt/_1.logrm -fr /mnt/ip_mask.log}WANZHENG(){ unset tmp;tmp=$1_11=`echo $tmp |wc -c` if [ $_11 -lt 9 ];then _22=`expr 9 - $_11` _00=`for ((t=1;t<=$_22;t++)); do y=${y}0; done;echo $y` tmp=${_00}${tmp} fiecho $tmp}echo "Judging the ip address ....."chmod 777 /mntchattr -i -a /mntrmfileJudge $1IFIP=`echo $1 |sed -n '/[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}/p'`if [ -z $IFIP ];then echo "The ip is not userful";exit 1 else for ((i=1;i<5;i++)) do n=`echo $1|cut -d. -f $i` _1=`echo $n|cut -c 1` [ $_1 -eq 0 ]&& n=0 if [ $i -eq 1 ];then [ "$n" -eq 0 ]&&echo "Error : $n is equal 0 ..."&& exit 1 fi if [ $i -eq 4 ];then [ "$n" -eq 0 ]&&echo "Error : $n is equal 0 ..."&& exit 1 fi [ "$n" -gt 255 ]&&echo "Error : $n is greater than 255 ..."&& exit 1 echo "${n}." >>/mnt/ipaddress.log done IP=`cat /mnt/ipaddress.log| tr -d '\n' |sed 's/\./\n/4g'`fiecho "Judging the netmask....."Judge $2unset netmask;netmask=$2echo $netmask |awk 'split($0,array,"."){for (i=1;i<=4;i++){print array[i]}}'|grep -A 1 255 >/mnt/_1.logunset num;num=`cat /mnt/_1.log|wc -l`unset ifz;ifz=`cat /mnt/_1.log |head -1`if [ -z $ifz ];then Cut_1=`echo $netmask |cut -d. -f1` [ "$Cut_1" -gt 255 ]&&echo "Error : $Cut_1 is greater than 255 ..."&& exit 1 _10_2=`Turn10to2 $Cut_1` _2_wanzheng=`WANZHENG $_10_2` num_1=`echo $_2_wanzheng | grep -o 1 |wc -l` num_0=`echo $_2_wanzheng | grep -o 0 |wc -l` unset x;unset y NUM_1=`for ((j=1;j<=$num_1;j++)); do x=${x}1; done;echo $x`; NUM_0=` for ((v=1;v<=$num_0;v++)); do y=${y}0; done;echo $y` NUM=${NUM_1}${NUM_0} [ $NUM != $_2_wanzheng ]&&echo "Error : $n is not userful .______.."&&exit 1 MASK=$2else
unset NUM; NUM=`expr 4 - $num`if [ $NUM -ne 0 ];thenfor ((i=$NUM;i>0;i--)); do echo 0 >>/mnt/_1.log; donenetmask=`cat /mnt/_1.log|tr '\n' .|sed 's/.*/&\n/g'|sed 's/\.$//'`fiIFMASK=`echo $netmask |sed -n '/[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}/p'`if [ -z $IFMASK ];then echo "Error: the NETMASK is not userfull..." else rmfile for ((i=1;i<5;i++)) do n=`echo $netmask|cut -d. -f $i` _1=`echo $n|cut -c 1` [ "$_1" -eq "0" ]&& n=0 if [ $i -eq 1 ];then [ "$n" -eq 0 ]&&echo "Error : $n is equal 0 ..."&& exit 1 fi [ "$n" -gt 255 ]&&echo "Error : $n is greater than 255 ..."&& exit 1 n_3=`echo "obase=2;ibase=10;$n"|bc` n_2=`WANZHENG $n_3` num_1=`echo $n_2| grep -o 1 |wc -l` num_0=`echo $n_2| grep -o 0 |wc -l` unset x;unset y NUM_1=`for ((j=1;j<=$num_1;j++)); do x=${x}1; done;echo $x`; NUM_0=` for ((v=1;v<=$num_0;v++)); do y=${y}0; done;echo $y` NUM=${NUM_1}${NUM_0} [ $NUM != $n_2 ]&&echo "Error : $n is not userful .______.."&&exit 1 echo "${n}.">>/mnt/netmask.log done MASK=`cat /mnt/netmask.log| tr -d '\n' |sed 's/\./\n/4g'`fifiecho "The ip address is :"echo "++++++++++++++++++++++++++"echo "+ $IP +"|grep $IP --color=yesecho "++++++++++++++++++++++++++"echo "The netmask is :"echo "++++++++++++++++++++++++++"echo "+ $MASK +"|grep $MASK --color=yesecho "++++++++++++++++++++++++++"echo "Turning ...";sleep 2function TURN(){ for ((i=1;i<5;i++))doTN=`echo $1| awk 'split($0,array,"."){for (j=1;j<=4;j++){print array[j]}}' | \awk 'NR==nr {print $0}' nr=$i`TO_DUMP=`Turn10to2 $TN`TO=`WANZHENG $TO_DUMP`echo "${TO}.">>/mnt/${1}.logdoneecho `cat /mnt/${1}.log| tr -d '\n' |sed 's/\./\n/4g'`rm -fr /mnt/${1}.log}unset ip;ip=`TURN $IP`unset mask;mask=`TURN $MASK`echo;echo -e "The IP: $ip"|grep $ip --color=yesecho;echo -e "The MASK : $mask"|grep $mask --color=yesunset ip_maskfor ((i=0;i<36;i++))do ip_number=`echo ${var:i:1}` mask_number=`echo ${mask:i:1}` if [ $mask_number == 1 ];then ip_mask=${ip_mask}${ip:i:1} fi if [ $mask_number == 0 ];then ip_mask=${ip_mask}0 fi if [ $mask_number == "." ];then ip_mask=${ip_mask}. fidone>/dev/null 2>&1echo;echo -e "The NETWORK_NUMBER: $ip_mask"|grep $ip_mask --color=yesip_mask_=`echo $ip_mask|sed 's/\./ /g'`for var in $ip_mask_do Turn2to10 $var>>/mnt/ip_mask.logdoneNETWORK=`cat /mnt/ip_mask.log|tr '\n' . |sed 's/\.//4g'|sed 's/.*/&\n/g'`echo;echo "The network is: $NETWORK "|grep $NETWORK --color=yesthe_num_of_zero=`echo $mask | grep -o 0 |wc -l`unset D;for ((i=1;i<=the_num_of_zero;i++)); do D=${D}1;doneDIFF=`Turn2to10 $D`DIFF_1=`expr $DIFF - 1`echo;echo "The number of userful ip: $DIFF_1" |grep $DIFF_1 --color=yesrmfile#_____________________________________________________________________________________________(0)echolimits(){ echo;echo "The broadcast is : $BROADCAST" |grep $BROADCAST --color=yesecho;echo "the limits of usrful ip : ${FIRST_IP} - ${LAST_IP}" \|grep "${FIRST_IP} - ${LAST_IP}" --color=yes}exitlist(){ echo exiting;sleep 1;exit 0}n_8=`echo "${the_num_of_zero}/8"|bc`;m_8=`echo "${the_num_of_zero}%8"|bc`;if [ $n_8 == 0 ];then NETWORK_4=`echo $NETWORK|cut -d. -f4` LEST=`echo $NETWORK| sed "s/\${NETWORK_4}$//g"` unset D;for ((i=1;i<=$the_num_of_zero;i++)); do D=${D}1; done DIFF_1=`Turn2to10 $D` first=`expr $NETWORK_4 + 1`;FIRST_IP=${LEST}${first} broad=$[ NETWORK_4 + DIFF ];BROADCAST=${LEST}${broad} last=$(( broad - 1 ));LAST_IP=${LEST}${last} echolimits read -t 4 -p "List(y/n) ?" list case $list in y|Y|yes|YES) echo "The list of userful ip address:";sleep 2 for ((i=1;i<=$DIFF-1;i++)) do NL=`expr $NETWORK_4 + $i` echo $LEST$NL |grep -o "$LEST$NL" --color=yes done exit 0 ;; *) exitlist ;; esacfi#________________________________________________________________________________________(1)if [ $n_8 == 1 ];then if [ $m_8 == 0 ];then IP_4=`echo $IP|cut -d. -f4` LEST=`echo $IP| sed "s/\${IP_4}$//g"` FIRST_IP=${LEST}1 LAST_IP=${LEST}254 BROADCAST=${LEST}255 echolimits read -t 4 -p "List(y/n) ?" list case $list in y|Y|yes|YES) echo "The list of userful ip address:";sleep 2 for ((i=1;i<=254;i++)); do echo ${LEST}$i \ | grep "${LEST}$i" --color=yes; done ;; *) exitlist ;; esac else unset LEST_2;LEST_2=`echo $NETWORK | tr '.' '\n' | head -2 \ | tr '\n' '.' |sed 's/\.$/\n/g'` unset LEST_1;LEST_1=`echo $NETWORK | cut -d. -f3` unset D;for ((i=1;i<=$m_8;i++));do D=${D}1;done unset DIFF;DIFF=`Turn2to10 $D` broad=`expr $LEST_1 + $DIFF` FIRST_IP=${LEST_2}.${LEST_1}.1 LAST_IP=${LEST_2}.${broad}.254 BROADCAST=${LEST_2}.${broad}.255 echolimits read -t 4 -p "List ?" list case $list in y|Y|yes|YES) echo "The list of userful ip address:";sleep 2 for ((i=1;i<=$DIFF;i++)) do MON=`expr $LEST_1 + $i` for ((j=1;j<=254;j++));do echo ${LEST_2}.${MON}.$j \ |grep "${LEST_2}.${MON}.$j" --color=yes;done done ;; *) exitlist ;; esac fi fi#_________________________________________________________________________________2if [ $n_8 == 2 ];then
if [ $m_8 == 0 ];then unset LEST_2;LEST_2=`echo $NETWORK | tr '.' '\n' \ | head -2 | tr '\n' '.' |sed 's/\.$/\n/g'` echo;echo "The broadcast is : ${LEST_2}.255.255" \ |grep "${LEST_2}.255.255" --color=yes FIRST_IP=${LEST_2}.255.1 LAST_IP=${LEST_2}.255.254 BROADCAST=${LEST_2}.255.255 echolimits read -t 4 -p "List ?" list case $list in y|Y|yes|YES) echo "The list of userful ip address:";sleep 2 for ((i=1;i<=254;i++)) do for((j=1;j<=254;j++));do echo ${LEST_2}.${i}.${j} \ |grep "${LEST_2}.${i}.${j}" --color=auto;done done ;; *) exitlist ;; esac else unset LEST;LEST=`echo $NETWORK | tr '.' '\n' | head -1 \ | tr '\n' '.' |sed 's/\.$/\n/g'` unset LEST_1;LEST_1=`echo $NETWORK | cut -d. -f2` unset D;for ((i=1;i<=$m_8;i++));do D=${D}1;done unset DIFF;DIFF=`Turn2to10 $D` broad=`expr $LEST_1 + $DIFF` FIRST_IP=${LEST}.${LEST_1}.255.1 LAST_IP=${LEST}.${broad}.255.254 BROADCAST=${LEST}.${broad}.255.255 echolimits read -t 4 -p "List ?" list case $list in y|Y|yes|YES) echo "The list of userful ip address:";sleep 2 for ((i=1;i<=$DIFF;i++)) do MON=`expr $LEST_1 + $i` for ((j=1;j<=255;j++)) do for((k=1;k<=254;k++));do echo ${LEST}.${MON}.${j}.${k} \ |grep "${LEST}.${MON}.${j}.${k}" --color=yes;done done done ;; *) exitlist ;; esac fifi#_________________________________________________________________________________3if [ $n_8 == 3 ];then
if [ $m_8 == 0 ];then unset LEST_1;LEST_1=`echo $NETWORK | tr '.' '\n' | head -1 \ | tr '\n' '.' |sed 's/\.$/\n/g'` echo;echo "The broadcast is : ${LEST_1}.255.255.255" \ |grep "${LEST_1}.255.255.255" --color=yes FIRST_IP=${LEST_1}.255.255.1 LAST_IP=${LEST_1}.255.255.254 BROADCAST=${LEST_1}.255.255.255 echolimits read -t 4 -p "List ?" list case $list in y|Y|yes|YES) echo "The list of userful ip address:";sleep 2 for ((i=1;i<=255;i++)) do for ((k=1;k<=255;i++)) do for((j=1;j<=254;j++));do echo ${LEST_1}.${i}.${k}.${j} \ |grep "${LEST_1}.${i}.${k}${j}" --color=yes;done done done ;; *) exitlist ;; esac else unset LEST_1;LEST_1=`echo $NETWORK | tr '.' '\n' | head -1 \ | tr '\n' '.' |sed 's/\.$/\n/g'` unset D;for ((i=1;i<=$m_8;i++));do D=${D}1;done unset DIFF;DIFF=`Turn2to10 $D` broad=`expr $LEST_1 + $DIFF` FIRST_IP=${LEST_1}.255.255.1 LAST_IP=${broad}.255.255.254 BROADCAST=${broad}.255.255.255 echolimits read -t 4 -p "List (y/n)?" list case $list in y|Y|yes|YES) echo "The list of userful ip address:";sleep 2 for ((i=1;i<=$DIFF;i++)) do MON=`expr $LEST_1 + $i` for ((j=1;j<=255;j++)) do for((n=1;n<=255;n++)) do for((k=1;k<=254;k++));do echo ${MON}.${j}.${n}.${k} \ | grep "${MON}.${i}.${j}.${k}" --color=yes;done done done done ;; *) exitlist ;; esac fifirmfile