0%

列出网络上所有活动的主机

网络活动主机扫描脚本:快速检测局域网内在线设备

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
#!/bin/bash

# 配置参数
NETWORK="192.168.0" # 网络前缀
START=1 # 起始IP
END=255 # 结束IP
TIMEOUT=1 # ping超时时间(秒)
COUNT=1 # ping包数量
THREADS=50 # 并发线程数
OUTPUT_FILE="alive_hosts.txt" # 结果保存文件

# 显示脚本使用帮助
usage() {
echo "用法: $0 [选项]"
echo "选项:"
echo " -n <网络前缀> 设置网络前缀(默认: 192.168.0)"
echo " -s <起始IP> 设置起始IP(默认: 1)"
echo " -e <结束IP> 设置结束IP(默认: 255)"
echo " -t <超时时间> 设置ping超时时间(秒)(默认: 1)"
echo " -c <包数量> 设置ping包数量(默认: 1)"
echo " -T <线程数> 设置并发线程数(默认: 50)"
echo " -o <文件> 设置结果输出文件(默认: alive_hosts.txt)"
echo " -h 显示帮助信息"
exit 1
}

# 解析命令行参数
while getopts "n:s:e:t:c:T:o:h" opt; do
case $opt in
n) NETWORK="$OPTARG" ;;
s) START="$OPTARG" ;;
e) END="$OPTARG" ;;
t) TIMEOUT="$OPTARG" ;;
c) COUNT="$OPTARG" ;;
T) THREADS="$OPTARG" ;;
o) OUTPUT_FILE="$OPTARG" ;;
h) usage ;;
*) usage ;;
esac
done

# 检查参数有效性
if [ $START -gt $END ]; then
echo "错误: 起始IP不能大于结束IP"
exit 1
fi

if [ $THREADS -lt 1 ] || [ $THREADS -gt 255 ]; then
echo "错误: 线程数必须在1-255之间"
exit 1
fi

# 初始化结果文件
> $OUTPUT_FILE

# 扫描函数
scan_host() {
local ip="$NETWORK.$1"
# 执行ping命令,静默模式
if ping -c $COUNT -W $TIMEOUT $ip &> /dev/null; then
# 获取主机名(如果能解析)
local hostname=$(nslookup $ip 2>/dev/null | grep 'name =' | awk '{print $4}' | sed 's/\.$//')
if [ -n "$hostname" ]; then
echo "$ip is alive (主机名: $hostname)"
echo "$ip $hostname" >> $OUTPUT_FILE
else
echo "$ip is alive"
echo "$ip" >> $OUTPUT_FILE
fi
fi
}

# 显示扫描信息
echo "开始扫描网络 $NETWORK.$START-$NETWORK.$END ..."
echo "并发线程数: $THREADS, 超时时间: $TIMEOUT秒"
echo "结果将保存至: $OUTPUT_FILE"
echo "----------------------------------------"

# 多线程扫描
for ((i=START; i<=END; i++)); do
scan_host $i &
# 控制并发线程数
while [ $(jobs -r | wc -l) -ge $THREADS ]; do
sleep 0.1
done
done

# 等待所有线程完成
wait

# 显示扫描结果汇总
echo "----------------------------------------"
echo "扫描完成! 共发现 $(wc -l < $OUTPUT_FILE) 台活动主机:"
cat $OUTPUT_FILE

使用示例:

1
2
3
4
5
# 扫描192.168.1.1-100,使用30线程
./scan_alive_hosts.sh -n 192.168.1 -s 1 -e 100 -T 30

# 快速扫描(1个包,0.5秒超时)
./scan_alive_hosts.sh -c 1 -t 0.5

欢迎关注我的其它发布渠道

表情 | 预览
快来做第一个评论的人吧~
Powered By Valine
v1.3.10