用fping编写脚本扫描10.0.0.0/24网段在线主机

用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编辑模式下写入脚本内容

  1. 按键盘上的 i 键(切换到「插入模式」,左下角会显示-- INSERT --,此时可输入文字);
  2. 以下完整脚本,在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

  1. 按键盘上的 Esc 键(退出「插入模式」,回到「普通模式」,左下角-- INSERT --消失);
  2. 输入 :wq(冒号+w+q,含义:w=保存文件,q=退出Vim);
  3. 按回车键,完成保存并返回终端。

三、运行脚本

步骤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 赋予执行权限。
相关推荐
故事挺秃然37 分钟前
Python异步(Asyncio)(一)
服务器·网络·python
小毛驴85039 分钟前
nrm test 所有源超时解决办法
linux·服务器·网络
SongYuLong的博客43 分钟前
ARM Linux 交叉编译工具链(toolchain)
linux·运维·arm开发
云计算老刘1 小时前
Shell三剑客 : 2. sed 使用手册
linux·运维·服务器
qq_479875431 小时前
Linux 网络实验(3)
linux·运维·网络
誰能久伴不乏1 小时前
为什么 TCP 服务端重启会出现 “Address already in use”问题解析
linux·服务器·c语言·网络·c++·tcp/ip
last demo1 小时前
grep和sed
linux·运维·前端·chrome
VekiSon1 小时前
gdb工具介绍
linux·c语言
apihz1 小时前
批量获取3位未注册短域名免费API接口每日更新
android·服务器·网络·网络协议·tcp/ip