ping_test_parallel.sh 并行網絡掃描腳本

并行網絡掃描腳本分析:提高網絡探測效率

    • 引言
    • 腳本概述
    • 核心代碼分析
      • 顏色定義與初始化
      • 并行處理機制
      • 并行執行與進程控制
      • 結果處理與統計
    • 技術亮點
    • 性能分析
    • 結論
    • 附錄:完整腳本

引言

在網絡管理和運維過程中,快速檢測網段內主機的在線狀態是一項常見需求。傳統的順序掃描方法在面對大型網段時效率低下,而并行處理則可以顯著提升掃描速度。本文將分析一個基于Bash的并行網絡掃描腳本,探討其實現原理、優勢以及可能的改進方向。

腳本概述

這個名為ping_test_parallel.sh的腳本使用并行處理技術,通過ping命令同時檢測多個IP地址的可達性,并以彩色輸出展示結果。腳本主要特點包括:

  • 并行執行ping測試,大幅提高掃描效率
  • 控制最大并行進程數,避免系統資源過度消耗
  • 使用彩色輸出直觀展示在線/離線狀態
  • 提供掃描結果統計信息

核心代碼分析

顏色定義與初始化

# 顏色定義
GREEN='\033[0;32m'
RED='\033[0;31m'
NC='\033[0m' # No Color# 臨時文件用于存儲結果
TEMP_FILE="/tmp/ping_results_$$"
ipaddr="10.0.20"

腳本使用ANSI轉義序列定義了綠色和紅色,分別用于標識在線和離線狀態。$$變量代表當前腳本的進程ID,確保臨時文件名的唯一性,避免多個實例之間的沖突。

并行處理機制

# 最大并行進程數
MAX_PROC=20
current_proc=0# 測試函數
test_ip() {local ip=$1if ping -c 2 -W 1 $ip >/dev/null 2>&1; thenecho "$ip 1" >> "$TEMP_FILE"elseecho "$ip 0" >> "$TEMP_FILE"fi
}

腳本限制了最大并行進程數為20,這是一個平衡掃描速度和系統負載的關鍵參數。test_ip函數封裝了ping測試邏輯,對每個IP執行2次ping,超時時間為1秒,并將結果寫入臨時文件。

并行執行與進程控制

# 并行測試所有IP
for i in {1..254}; doip="$ipaddr.$i"# 后臺運行ping測試test_ip $ip &# 控制并行進程數current_proc=$((current_proc + 1))if [ $current_proc -ge $MAX_PROC ]; thenwaitcurrent_proc=0fi
done# 等待所有進程完成
wait

這段代碼是腳本的核心,它遍歷C類網段的254個可能IP地址,并在后臺啟動ping測試。通過wait命令和計數器機制,腳本確保并行進程數不超過預設的最大值,既提高了效率,又避免了系統資源耗盡。

結果處理與統計

# 統計結果
declare -i total=0
declare -i online=0
declare -i offline=0# 讀取并顯示結果
while read ip status; doif [ "$status" = "1" ]; thenecho -e "${GREEN}[在線]${NC} $ip"((online++))elseecho -e "${RED}[離線]${NC} $ip"((offline++))fi((total++))
done < <(sort -V "$TEMP_FILE")

腳本使用sort -V命令按版本號排序方式處理IP地址,確保輸出的IP地址順序符合人類直覺。通過進程替換<(...)將排序后的結果傳遞給while循環,實現了高效的結果處理。

技術亮點

  1. 并行處理:腳本通過后臺執行(&)實現了并行處理,顯著提高了掃描效率。
  2. 資源控制:通過限制最大并行進程數,避免系統資源過度消耗。
  3. 進程同步:使用wait命令確保所有子進程完成后再繼續執行。
  4. 臨時文件管理:使用進程ID創建唯一臨時文件,并在腳本結束時清理。
  5. 彩色輸出:利用ANSI轉義序列實現彩色輸出,提升用戶體驗。

性能分析

與傳統的順序掃描相比,該腳本的并行處理機制可以顯著提高掃描速度。在一個包含254個IP地址的C類網段中:

  • 順序掃描:如果每個IP平均需要2秒(考慮超時),總共需要約508秒(8.5分鐘)
  • 并行掃描:使用20個并行進程,理論上只需要約26秒(508/20,實際略多)

這種效率提升在大型網絡環境中尤為明顯,是網絡管理員的得力助手。

結論

這個并行網絡掃描腳本展示了如何利用Bash的并行處理能力來提高網絡管理效率。通過合理控制并行度和資源使用,它在保證系統穩定的同時,大幅提升了掃描速度。對于網絡管理員和系統運維人員來說,這是一個簡單而實用的工具,可以幫助快速了解網絡狀態,及時發現潛在問題。

附錄:完整腳本

#!/bin/bash# 顏色定義
GREEN='\033[0;32m'
RED='\033[0;31m'
NC='\033[0m' # No Color# 臨時文件用于存儲結果
TEMP_FILE="/tmp/ping_results_$$"
ipaddr="10.0.20"
echo "開始并行測試 $ipaddr.0/24 網段..."# 最大并行進程數
MAX_PROC=20
current_proc=0# 測試函數
test_ip() {local ip=$1if ping -c 2 -W 1 $ip >/dev/null 2>&1; thenecho "$ip 1" >> "$TEMP_FILE"elseecho "$ip 0" >> "$TEMP_FILE"fi
}# 創建臨時文件
> "$TEMP_FILE"# 并行測試所有IP
for i in {1..254}; doip="$ipaddr.$i"# 后臺運行ping測試test_ip $ip &# 控制并行進程數current_proc=$((current_proc + 1))if [ $current_proc -ge $MAX_PROC ]; thenwaitcurrent_proc=0fi
done# 等待所有進程完成
wait# 統計結果
declare -i total=0
declare -i online=0
declare -i offline=0# 讀取并顯示結果
while read ip status; doif [ "$status" = "1" ]; thenecho -e "${GREEN}[在線]${NC} $ip"((online++))elseecho -e "${RED}[離線]${NC} $ip"((offline++))fi((total++))
done < <(sort -V "$TEMP_FILE")# 輸出統計信息
echo -e "\n=== 測試完成 ==="
echo "總計: $total"
echo -e "${GREEN}在線: $online${NC}"
echo -e "${RED}離線: $offline${NC}"# 清理臨時文件
rm -f "$TEMP_FILE"

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/80273.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/80273.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/80273.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

leetcode 3342. 到達最后一個房間的最少時間 II 中等

有一個地窖&#xff0c;地窖中有 n x m 個房間&#xff0c;它們呈網格狀排布。 給你一個大小為 n x m 的二維數組 moveTime &#xff0c;其中 moveTime[i][j] 表示在這個時刻 以后 你才可以 開始 往這個房間 移動 。你在時刻 t 0 時從房間 (0, 0) 出發&#xff0c;每次可以移…

關于vue-office在vue3工程中的引用報錯問題

在vue3項目工程中&#xff0c;根據vue-office文檔在vue2中的引用&#xff1a; //引入VueOfficeDocx組件 相關樣式import VueOfficeDocx from vue-office/docx;import vue-office/docx/lib/index.css; 報錯信息&#xff1a; [plugin:vite:import-analysis] Failed to resolve …

【macOS常用快捷鍵】

以下是 macOS 最常用快捷鍵列表&#xff0c;按使用頻率由高到低分類整理&#xff0c;涵蓋日常操作、效率工具及系統控制&#xff0c;助你快速提升使用效率&#xff1a; 一、基礎高頻操作 快捷鍵功能說明Command C復制選中內容Command V粘貼Command X剪切Command Z撤銷上一…

mdadm 報錯: buffer overflow detected

最近跑 blktest (https://github.com/osandov/blktests) 時發現 md/001 的測試失敗了 單獨執行&#xff0c;最后定位到是 mdadm 命令報錯: buffer overflow detected 這個 bug 目前已經修復: https://git.kernel.org/pub/scm/utils/mdadm/mdadm.git/commit/?id827e1870f3205…

查看jdk是否安裝并且配置成功?(Android studio安裝前的準備)

WinR輸入cmd打開命令提示窗口 輸入命令 java -version 回車顯示如下&#xff1a;

STM32智能刷卡消費系統(uC/OS-III)

一、項目概述與開發背景 本系統是一款基于STM32微控制器的智能刷卡消費終端&#xff0c;集成RFID識別、OLED顯示、Flash存儲、藍牙通信等核心模塊。項目采用uC/OS-III實時操作系統實現多任務并發處理&#xff0c;適用于校園一卡通、企業食堂等小額支付場景。系統支持定額扣款、…

[人機交互]以用戶為中心的交互設計

一.以用戶為中心設計的兩個特征 ? 理解和指定產品的使用上下文 &#xff0c;并用于指導設計 ? 用戶參與式開發 ? 參與 評估研究 &#xff08;第十 — 十四章&#xff09; ? 參與 設計過程 &#xff1a;用戶作為合作設計人員 二.用戶參與設計的重要性 ? 需求的獲取主要來源…

Abaqus學習筆記

目錄 Abaqus介紹 學習資源 ?編輯Abaqus/CAE abaqus下載安裝 abaqus基本操作 Abaqus啟動 新建模型 ?編輯 ?編輯修改界面背景 ?編輯?編輯結果信息的顯示與否 ?編輯計算結果信息字體設置 ?編輯允許多繪圖狀態 單位量綱 視圖操作 事前說明 ODB文件 本構關系…

論壇系統開發(0-1) (上 前置知識介紹)

前置知識 1. 軟件的生命周期 生命周期: 對事物進行定義(描述) -> 創建 -> 使用 -> 銷毀的過程 軟件?命周期中以劃分為可?性研究、需求分析、概要設計、詳細設計、實現、組裝(集成)測試、確認測試、使?、維護、退役10個階段&#xff0c;如下圖&#xff1a; a. 可…

架構師面試(三十七):監控系統架構模式

題目 監控是在產品生命周期的運維環節&#xff0c;能對產品的關鍵指標數據進行【實時跟蹤】并對異常數據進行【實時報警】。 一句話描述&#xff0c;監控系統可以幫我們【主動預防和發現】業務系統中的問題。 我們常說&#xff0c;監控系統是 “糧草”&#xff0c;業務系統是…

【面試 · 二】JS個別重點整理

目錄 數組方法 字符串方法 遍歷 es6 構造函數及原型 原型鏈 this指向 修改 vue事件循環Event Loop FormData 數組方法 改變原數組&#xff1a;push、pop、shift、unshift、sort、splice、reverse不改變原屬組&#xff1a;concat、join、map、forEach、filter、slice …

深度學習里程碑:AlexNet 架構解析與核心技術詳解

內容摘要 本文深度解析2012年ILSVRC冠軍模型AlexNet&#xff0c;全面闡述其在深度學習發展中的關鍵突破。從模型架構出發&#xff0c;詳細解析卷積層、池化層、全連接層的數學原理&#xff0c;重點分析ReLU激活函數、LRN局部歸一化、重疊池化等創新技術的數學表達與工程價值。…

第5章 深度學習和卷積神經網絡

深度學習是人工智能的一種實現方法。本章我們將考察作為深度學習的代表的卷積神經網絡的數學結構。 5-1小惡魔來講解卷積神經網絡的結構 深度學習是重疊了很多層的隱藏層&#xff08;中間層&#xff09;的神經網絡。這樣的神經網絡使隱藏層具有一定的結構&#xff0c;從而更加…

JVM——JVM是怎么實現invokedynamic的?

JVM是怎么實現invokedynamic的&#xff1f; 在Java 7引入invokedynamic之前&#xff0c;Java虛擬機&#xff08;JVM&#xff09;在方法調用方面相對較為“僵化”。傳統的Java方法調用主要依賴于invokestatic、invokespecial、invokevirtual和invokeinterface這四條指令&#x…

STM32教程:ADC原理及程序(基于STM32F103C8T6最小系統板標準庫開發)*詳細教程*

前言: 本文章介紹了STM32微控制器的ADC外設,介紹了ADC的底層原理以及基本結構,介紹了ADC有關的標準庫函數,以及如何編寫代碼實現ADC對電位器電壓的讀取。 可以根據基本結構圖來編寫代碼 大體流程: 1、開啟RCC時鐘(包括ADC和GPIO的時鐘,另外ADCCLK的分頻器,也需要配置…

2025年APP安全攻防指南:抵御DDoS與CC攻擊的實戰策略

2025年&#xff0c;隨著AI技術與物聯網設備的深度滲透&#xff0c;DDoS與CC攻擊的復雜性和破壞性顯著升級。攻擊者通過偽造用戶行為、劫持智能設備、利用協議漏洞等手段&#xff0c;對APP發起精準打擊&#xff0c;導致服務癱瘓、用戶流失甚至數據泄露。面對這一挑戰&#xff0c…

STM32的定時器

定時器的介紹 介紹&#xff1a;STM32F103C8T6微控制器內部集成了多種類型的定時器&#xff0c;這些定時器在嵌入式系統中扮演著重要角色&#xff0c;用于計時、延時、事件觸發以及PWM波形生成、脈沖捕獲等應用。 *幾種定時器&#xff08;STM32F103系列&#xff09;&#xff1…

算法中的數學:約數

1.求一個整數的所有約數 對于一個整數x&#xff0c;他的其中一個約數若為i&#xff0c;那么x/i也是x的一個約數。而其中一個約數的大小一定小于等于根號x&#xff08;完全平方數則兩個約數都為根號x&#xff09;&#xff0c;所以我們只需要遍歷到根號x&#xff0c;然后計算出另…

不同OS版本中的同一yum源yum list差異排查思路

問題描述&#xff1a; qemu-guest-agent二進制rpm包的yum倉庫源和yum源倉庫配置文件path_to_yum_conf&#xff0c; 通過yum list --available -c path_to_yum_conf 查詢時&#xff0c;不同的OS版本出現了不同的結果 anolis-8無法識別 centos8可以識別 說明&#xff1a; 1 測試…

如何使用極狐GitLab 軟件包倉庫功能托管 helm chart?

極狐GitLab 是 GitLab 在中國的發行版&#xff0c;關于中文參考文檔和資料有&#xff1a; 極狐GitLab 中文文檔極狐GitLab 中文論壇極狐GitLab 官網 軟件包庫中的 Helm charts (BASIC ALL) WARNING:Helm chart 庫正在開發中&#xff0c;由于功能有限&#xff0c;尚未準備好用…