Files
.dotfile/script/scan-ip.sh
T
2026-05-17 14:03:17 +08:00

33 lines
1.1 KiB
Bash

#!/bin/bash
if command -v ip &>/dev/null; then
LOCAL_IP=$(ip addr show | grep 'inet ' | grep -v '127.0.0.1' | awk '{print $2}' | cut -d/ -f1 | head -n 1)
elif command -v ifconfig &>/dev/null; then
LOCAL_IP=$(ifconfig | grep 'inet ' | grep -v '127.0.0.1' | awk '{print $2}' | head -n 1)
else
echo "错误: 找不到 ip 或 ifconfig 命令" && exit 1
fi
[ -z "$LOCAL_IP" ] && echo "错误: 未能检测到本地 IP" && exit 1
PREFIX="${LOCAL_IP%.*}"
echo "本机 IP: $LOCAL_IP,扫描网段: $PREFIX.1-254"
echo "------------------------------------------------------"
# macOS: -W 单位毫秒,-S 绑定源 IP
# Linux: -W 单位秒, -I 绑定源 IP
# 绑定源 IP 是为了防止 VPN 劫持路由导致 ping 走错网卡、ARP 不触发
if [ "$(uname -s)" = "Darwin" ]; then
for i in $(seq 1 254); do
ping -c 1 -W 1000 -S "$LOCAL_IP" "$PREFIX.$i" >/dev/null 2>&1 && echo "$PREFIX.$i 在线" &
done
else
for i in $(seq 1 254); do
ping -c 1 -W 1 -I "$LOCAL_IP" "$PREFIX.$i" >/dev/null 2>&1 && echo "$PREFIX.$i 在线" &
done
fi
wait
echo "------------------------------------------------------"
echo "扫描完成"