一.实验要求:

1.对于给定范围的ip地址进行主机在线测试

  2.ping测试结果保存在/tmp/ping目录下以时间戳为文件名的文件里,以便后续查看

二.实验过程:

#!/bin/env/ bash
#

#variable declaration
declare -a start_arr
declare -a end_arr

#define function
#IP address initialization
initial_fun(){

  read -p "Initial Address:" host_start
  read -p "End Address:" host_end
  echo -e "Your test segment is : \033[31m${host_start} ~ ${host_end}\033[0m"
}

#Input validation
confirm_fun(){
  read -p "Confirm(y);Exit(q);Re-Enter(r): " ack
  ack=${ack:="y"}
  while [ $ack != "y" -a $ack != "q" -a $ack != "r" ];do
  read -p "Confirm(y);Exit(q);Re-Enter(r):" ack
  done
}

#IP segmentation
Ip_field(){
  local i
  for ((i=1;i<=4;i++));do
    start_arr[$[i-1]]=`echo $host_start | cut -d. -f $i`
    end_arr[$[i-1]]=`echo $host_end | cut -d. -f $i`
  done
}

#C class test
Cping_fun(){
  local cnet=$1
  local i=$2
  local j=$3
  while [ $i -le $j ];do
    if ping -W 1 -c 1 $cnet.$i &> /dev/null;then
      echo "$cnet.$i is up." | tee -a /tmp/ping/`date +%F-%H\:%M`.ping
    else
      echo "$cnet.$i is down."
    fi
    trap 'exit 1' INT
    let i++

  done
}

#B class test
Bping_fun(){
  local bnet=$1
  local i=`echo $2 | cut -d. -f1`
  local I=`echo $2 | cut -d. -f2`
  local j=`echo $3 | cut -d. -f1`
  local J=`echo $3 | cut -d. -f2`
  if [ $i -eq $j ];then
    Cping_fun $bnet.$i $I $J
  else
    while [ $i -le $j ];do
      Cping_fun $bnet.$i 0 254
        let i++
    done
  fi

}

#main
cat << EOF
Host detetion address vaild range as follows:
B)| 128.0.0.0 ~~ 191.255.255.255
C)| 192.0.0.0 ~~ 223.255.255.255
Please enter your initial address and end address segment detection
such as:192.168.1.1 192.168.1.99
EOF
[ ! -d /tmp/ping ] && mkdir /tmp/ping
initial_fun
confirm_fun
until [ $ack == "y" ];do

  if [ $ack == "q" ];then
    exit 1
  else
  initial_fun
  confirm_fun
  fi

done
[ $ack == "y" ]&& echo "Test is starting..."
Ip_field
if [ ${start_arr[0]} -ge 192 -a ${start_arr[0]} -le 223 ];then
  net_addr=${start_arr[0]}.${start_arr[1]}.${start_arr[2]}
  flag_start=${start_arr[3]}
  flag_end=${end_arr[3]}
  Cping_fun $net_addr $flag_start $flag_end
elif [ ${start_arr[0]} -ge 128 -a ${start_arr[0]} -le 191 ];then
  net_addr=${start_arr[0]}.${start_arr[1]}
  flag_start=${start_arr[2]}.${start_arr[3]}
  flag_end=${end_arr[2]}.${end_arr[3]}
  Bping_fun $net_addr $flag_start $flag_end
else
  echo "Sorry,the detection of such addresses is not supported for the time being."
fi

三.实验总结:递推

四.实验思考:

  1.如何进行A类地址测试

      2.如何解决超址范围的ip引出的bug

  3.能不能给定三个参数,起始ip,结束ip,子网掩码编写个更优的测试脚本

  

最新文章

  1. 看看Parallel中高度封装的三个方法,Invoke,For和ForEach
  2. 在Linux下记录所有用户的登录和操作日志
  3. js广告弹窗
  4. Android高仿微信图片选择功能的PhotoPicker
  5. xinwajueji
  6. 添加zlib压缩步骤 OpenSSL
  7. C# 多个个Dictionary合并更优雅的写法
  8. Leetcode Count Prime
  9. h.264 scanning process for transform coefficients
  10. ORACLE 12C 基础
  11. uploadify上传图片的类型错误的解决办法
  12. 如何在vuejs中抽出公共代码
  13. RAID RAID 大揭秘~
  14. redis数据操作
  15. 阿里ECS配置MSSQL远程连接的坑
  16. Spring学习(二):Spring支持的5种Bean Scope
  17. [总结]web前端常用JavaScript代码段及知识点集锦
  18. 开源的.NET任务调度框架-HangFire
  19. [No0000A5]批处理常用命令大全&amp;&amp;21个DOS常用命令
  20. 全站从http升级到https(WordPress博客)

热门文章

  1. 【转】MFC 程序入口和执行流程
  2. 【思维题 kmp 构造】bzoj4974: [Lydsy1708月赛]字符串大师
  3. 【莫队】bzoj4542: [Hnoi2016]大数
  4. matlplotlib绘图(二)
  5. 每天一个linux命令(13):less命令
  6. Yii2 AR模型搜索数据条数不对,AR模型默认去重
  7. Nordic Collegiate Programming Contest 2015​ G. Goblin Garden Guards
  8. 实践自己的WebSite______流水
  9. 重新造轮子之静态链接1(Static linking)
  10. Leetcode2---&gt;链表中对应位相加(进位)