shell 实现
逻辑描述
- 队列里有10个初始值
- 每发起一个ping任务就从队列中取出一个值,并在任务完成后写入一个值到队列中
- 队列为空时,无法再发起任务,这样就能保证最多只有10个任务,任务过多会占用系统资源
- 控制每个ping任务的间隔,防止太慢
#!/bin/bash
# 无声ping
function do_ping(){
ping -c1 -W 0.5 $1 &> /dev/null
if [ $? -eq 0 ]
then
echo $1
fi
}
mkfifo .tmp
exec 9<> .tmp
# 初始化临界资源个数,10个
for i in {1..10}
do
echo ' ' > .tmp
done
for i in {1..100}
do
read -u9
{
do_ping $i
echo ' ' .tmp
} &
done
wait # 等待任务完成并不响应终端输入
rm -rf .tmp
最好用的方案,最快
nmap 192.168.1.0/24
或者nmap 192.168.1.1-100