用fping编写脚本扫描10.0.0.0/24网段在线主机
一、环境准备(安装fping工具)
fping是高效批量ping工具,比系统自带ping更适合网段扫描,先按系统类型安装:
1. Ubuntu/Debian系统
打开终端(Ctrl+Alt+T),执行以下2条命令:
bash
sudo apt update # 更新软件源(确保能找到最新fping版本)
sudo apt install fping -y # 自动安装fping(-y跳过确认)
2. Rocky Linux/CentOS/RHEL系统
终端执行以下2条命令(fping在EPEL仓库,需先启用):
bash
sudo dnf install epel-release -y # 启用EPEL扩展仓库
sudo dnf install fping -y # 安装fping
3. 验证fping安装成功
安装后执行命令:
bash
fping -v
若输出类似 fping 5.1 及版本信息,说明安装成功;若提示 fping: command not found,重新执行对应系统的安装命令。
二、用Vim编写扫描脚本
目标:编写脚本自动扫描10.0.0.0/24网段(10.0.0.1~10.0.0.254),输出所有ping通的在线IP。
步骤1:创建脚本文件
终端执行命令,创建名为scan_10_0_0_24.sh的脚本文件:
bash
touch scan_10_0_0_24.sh
- 说明:
touch命令用于创建空文件,脚本后缀.sh是LinuxShell脚本的标准命名。
步骤2:用Vim打开并编辑脚本文件
终端执行命令,用Vim编辑器打开刚创建的脚本:
bash
vim scan_10_0_0_24.sh
- 此时进入Vim的「普通模式」(不能直接输入文字,需切换到编辑模式)。
步骤3:Vim编辑模式下写入脚本内容
- 按键盘上的
i键(切换到「插入模式」,左下角会显示-- INSERT --,此时可输入文字); - 以下完整脚本,在Vim中编辑,也可以右键粘贴脚本(或按
Shift+Insert粘贴):
bash
#!/bin/bash
# 脚本功能:扫描10.0.0.0/24网段在线主机(ping通则判定为在线)
# 依赖:已安装fping工具,Linux系统专用
# 网段说明:10.0.0.0/24包含10.0.0.1~10.0.0.254共254个可用IP(排除网络地址10.0.0.0和广播地址10.0.0.255)
# ---------------------- 第一步:定义变量(方便后续修改) ----------------------
IP_FILE="temp_ip_list.txt" # 临时存放IP列表的文件(扫描后自动删除)
SUBNET_PREFIX="10.0.0" # 网段前缀(固定为10.0.0,对应10.0.0.0/24)
# ---------------------- 第二步:生成10.0.0.0/24网段IP列表 ----------------------
echo "=== 开始生成10.0.0.0/24网段IP列表 ==="
# 循环生成10.0.0.1到10.0.0.254的所有IP,写入临时文件
for ((i=1; i<=254; i++)); do
echo "${SUBNET_PREFIX}.$i" >> $IP_FILE # 拼接IP(如10.0.0.1、10.0.0.2...)并追加到文件
done
echo "IP列表生成完成,共254个IP(存储在$IP_FILE)"
# ---------------------- 第三步:fping批量扫描在线主机 ----------------------
echo -e "\n=== 开始扫描10.0.0.0/24网段在线主机(约3-5秒) ==="
# fping核心参数详解:
# -a:只输出"在线"的主机IP(过滤离线IP)
# -f $IP_FILE:从指定文件读取要扫描的IP列表
# -i 1:ping包发送间隔1毫秒(快速扫描,不占用过多网络资源)
# -t 500:每个IP的超时时间500毫秒(网络不稳定可改为1000)
# 2>/dev/null:忽略fping的错误提示(避免输出杂乱)
ONLINE_HOSTS=$(fping -a -f $IP_FILE -i 1 -t 500 2>/dev/null)
# ---------------------- 第四步:输出扫描结果 ----------------------
echo -e "\n========================================"
echo "10.0.0.0/24网段扫描结果:"
if [ -z "$ONLINE_HOSTS" ]; then
# 若ONLINE_HOSTS为空,说明未扫到在线主机
echo "未发现在线主机"
echo "可能原因:1. 网段错误;2. 网络禁止ICMP(ping)协议;3. 该网段无设备在线;4. 缺少root权限"
else
# 统计在线主机数量并格式化输出
HOST_COUNT=$(echo "$ONLINE_HOSTS" | wc -l)
echo "共发现 $HOST_COUNT 台在线主机:"
echo "$ONLINE_HOSTS" | nl -w2 -s'. ' # 带序号输出(如1. 10.0.0.7、2. 10.0.0.10)
fi
echo "========================================"
# ---------------------- 第五步:清理临时文件 ----------------------
rm -f $IP_FILE # 删除临时IP列表文件(避免占用磁盘空间)
echo -e "\n 临时文件已清理,扫描结束"
步骤4:保存脚本并退出Vim
- 按键盘上的
Esc键(退出「插入模式」,回到「普通模式」,左下角-- INSERT --消失); - 输入
:wq(冒号+w+q,含义:w=保存文件,q=退出Vim); - 按回车键,完成保存并返回终端。
三、运行脚本
步骤1:给脚本添加「执行权限」
终端执行命令(确保当前目录是脚本所在目录):
bash
chmod +x scan_10_0_0_24.sh
- 说明:Linux默认新建文件没有执行权限,
chmod +x命令用于赋予文件可执行权限(x=execute执行)。
步骤2:执行脚本(推荐root权限,避免扫描失败)
终端执行命令:
bash
sudo ./scan_10_0_0_24.sh
- 若提示输入密码,输入你的Linux登录密码(输入时不显示明文,输完按回车即可);
- 非root用户可直接执行
./scan_10_0_0_24.sh,但可能因权限不足导致扫描结果不准确。
四、扫描结果解读(示例+异常处理)
1. 正常结果示例(扫到在线主机)
=== 开始生成10.0.0.0/24网段IP列表 ===
IP列表生成完成,共254个IP(存储在temp_ip_list.txt)
=== 开始扫描10.0.0.0/24网段在线主机(约3-5秒) ===
========================================
10.0.0.0/24网段扫描结果:
共发现 3 台在线主机:
1. 10.0.0.1
2. 10.0.0.23
3. 10.0.0.56
========================================
临时文件已清理,扫描结束
- 带序号的IP即为「在线主机」,可直接使用这些IP进行后续操作(如远程连接)。
2. 异常结果处理
(1)未发现在线主机
========================================
10.0.0.0/24网段扫描结果:
未发现在线主机
可能原因:1. 网段错误;2. 网络禁止ICMP(ping)协议;3. 该网段无设备在线;4. 缺少root权限
========================================
解决办法:
- 用
ping 10.0.0.1手动测试1个IP,看是否能ping通(排除网络限制); - 确认你的主机是否在10.0.0.0/24网段(执行
ip addr查看本地IP); - 重新用
sudo执行脚本(root权限可避免ICMP发送限制)。
(2)fping: command not found
- 原因:fping未安装成功;
- 解决:重新执行「环境准备」部分的fping安装命令。
(3)Permission denied(权限拒绝)
- 原因:脚本没有执行权限;
- 解决:重新执行
chmod +x scan_10_0_0_24.sh赋予执行权限。