歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> SHELL編程 >> shell 檢測網段在線主機

shell 檢測網段在線主機

日期:2017/3/1 10:08:41   编辑:SHELL編程

寫一個shell腳本:
實現ping C類網段,B類網段和A類網段內的所有主機;
網段地址讓用戶輸入,而且通過腳本判斷網段類型;

  1. #!/bin/bash
  2. #Author: MOS
  3. #Script name: funPing.sh
  4. #Date & Time: 2012-10-09/21:53:09
  5. #Version: 1.0.1
  6. #Description:
  7. #
  8. #定義C類網段處理函數
  9. net_C(){
  10. #定義統計不在線IP數量的變量
  11. declare -i Fail=0
  12. #生成C類網的最後位IP,循環ping
  13. for i in `seq 1 254`;do
  14. #ping只發送一個,只等待1秒,得到的所有信息並扔掉,僅去邏輯值
  15. if ping -c 1 -W 1 $1.$i &> /dev/null ;then
  16. echo "Online $1.$i"
  17. else
  18. let Fail++
  19. fi
  20. done
  21. echo "No Online PC, Number is $Fail"
  22. }
  23. net_B(){
  24. #截取B類網的網段
  25. Bip=`echo $1|cut -d'.' -f1-2`
  26. declare -i Fail=0
  27. #循環生成B類網第三段
  28. for i in `seq 0 254`;do
  29. Res="$Bip.$i"
  30. #循環生成B類網第四段
  31. for r in `seq 1 254`;do
  32. if ping -c 1 -W 1 $Res.$r &> /dev/null ;then
  33. echo "Online $Res.$r"
  34. else
  35. let Fail++
  36. fi
  37. done
  38. done
  39. echo "No Online PC, Number is $Fail"
  40. }
  41. net_A(){
  42. Bip=`echo $1|cut -d'.' -f1`
  43. declare -i Fail=0
  44. #生成A類網的第二段,第三段和第四段以此類推
  45. for i in `seq 0 254`;do
  46. Res="$Bip.$i"
  47. for r in `seq 0 254`;do
  48. Res1="$Res.$r"
  49. for l in `seq 1 254`;do
  50. if ping -c 1 -W 1 $Res1.$l &> /dev/null ;then
  51. echo "Online $Res1.$l"
  52. else
  53. let Fail++
  54. fi
  55. done
  56. done
  57. done
  58. echo "No Online PC, Number is $Fail"
  59. }
  60. read -p "Please input subset:" Ip
  61. #判斷輸入IP段落是否合法
  62. if [[ $Ip =~ ^([2-9]|[1-9][0-9]|1[0-9][0-9]|2[01][0-9]|22[0-3])\.([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-4])\.([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-4])$ ]];then
  63. #合法,則取出第一個字段,屬於哪類網
  64. Mask=`echo "$Ip"|cut -d"." -f1`
  65. #如果是A類網,則調用net_A函數,依次類推
  66. [ $Mask -lt 128 ] && net_A $Ip
  67. [ $Mask -lt 192 -a $Mask -gt 127 ] && net_B $Ip
  68. [ $Mask -gt 191 ] && net_C $Ip
  69. else
  70. #如果輸入IP錯誤,則報錯信息如下
  71. echo "Error! $Ip invalid."
  72. fi

如果要使用以上代碼,要慎重...尤其是A類網和B類網...255*255*255的資源開銷,您自己琢磨....呃,如果僅供測試的話,可以把結果輸出到文件,放到後台執行,或者僅測試特定IP的話,您可以把for循環中seq的生成數字,修改一下,也是沒問題的.....

Copyright © Linux教程網 All Rights Reserved