檢查 192.168.1
網段中哪些 IP 地址正在使用,可以使用 Shell 腳本結合 ping
命令來并發掃描整個網段。以下是實現這一功能的完整腳本:
腳本:檢查 192.168.1
網段 IP 是否在用
#!/bin/bash
NETWORK="192.168.1"
TIMEOUT=1
PARALLEL=20
function log_info() {
echo -e "[INFO] $1"
}
function log_success() {
echo -e "\033[32m[SUCCESS] $1\033[0m"
}
function log_error() {
echo -e "\033[31m[ERROR] $1\033[0m"
}
function check_ip() {
local ip=$1
if ping -c 1 -W "$TIMEOUT" "$ip" &> /dev/null; then
log_success "IP $ip is online"
else
log_error "IP $ip is offline"
fi
}
function main() {
log_info "Scanning network $NETWORK.0/24..."
for i in {1..254}; do
ip="$NETWORK.$i"
check_ip "$ip" &
if [[ $(jobs -r -p | wc -l) -ge $PARALLEL ]]; then
wait -n
fi
done
wait
}
main
腳本說明
網段定義
NETWORK="192.168.1"
:定義要掃描的網段。
超時時間
TIMEOUT=1
:設置 ping
命令的超時時間為 1 秒。
并行掃描
PARALLEL=20
:設置同時掃描的 IP 數量為 20 個,以提高掃描效率。
日志輸出
check_ip
函數
- 使用
ping
命令檢查單個 IP 是否在線。 - 如果
ping
成功,則 IP 在線;否則,IP 離線。
主函數 main
- 遍歷
192.168.1.1
到 192.168.1.254
的所有 IP 地址。 - 使用
&
將 check_ip
放入后臺執行,實現并行掃描。 - 使用
jobs
和 wait
控制并行任務數量。
使用方法
- 將腳本保存為
scan_network.sh
。 - 賦予執行權限:
chmod +x scan_network.sh
- 運行腳本:
./scan_network.sh
示例輸出
[INFO] Scanning network 192.168.1.0/24...
[SUCCESS] IP 192.168.1.1 is online
[ERROR] IP 192.168.1.2 is offline
[SUCCESS] IP 192.168.1.3 is online
[ERROR] IP 192.168.1.4 is offline
...
優化建議
增加 IP 范圍參數
可以通過命令行參數指定掃描的 IP 范圍,例如:
./scan_network.sh 192.168.1.10 192.168.1.20
修改腳本:
START_IP=${1:-1}
END_IP=${2:-254}
for i in $(seq "$START_IP" "$END_IP"); do
ip="$NETWORK.$i"
check_ip "$ip" &
done
保存結果到文件
可以將掃描結果保存到文件中,便于后續分析:
LOG_FILE="scan_results.txt"
function log_success() {
echo -e "\033[32m[SUCCESS] $1\033[0m"
echo "[SUCCESS] $1" >> "$LOG_FILE"
}
function log_error() {
echo -e "\033[31m[ERROR] $1\033[0m"
echo "[ERROR] $1" >> "$LOG_FILE"
}
使用 fping
替代 ping
fping
是一個更高效的網絡掃描工具,支持批量掃描。如果系統安裝了 fping
,可以替換 ping
命令:
fping -c 1 -t "$TIMEOUT" "$ip" &> /dev/null
總結
該腳本通過并行 ping
掃描 192.168.1
網段,快速檢測哪些 IP 地址在線。通過調整并行數量和超時時間,可以平衡掃描速度和準確性。如果需要更高效的掃描,可以考慮使用 nmap
或 fping
等專業工具。
?轉自https://www.cnblogs.com/ydswin/p/18666134
該文章在 2025/1/16 11:18:45 編輯過