fping 是一个强大的网络诊断工具,它的主要功能是快速地、并行地 ping 一台或多台主机,以检查它们是否在线以及它们的响应时间,与传统的 ping 命令相比,fping 在扫描大量主机时效率要高得多。

核心特点与优势
为什么需要 fping 而不是系统自带的 ping?主要有以下几个原因:
- 速度极快:
fping默认是并行发送 ICMP 回显请求的,当扫描 100 个主机时,它不会像ping那样一个一个地等,而是同时向这 100 个主机发送请求,然后等待所有响应,这使得它在扫描网段或大量主机时,速度呈数量级提升。 - 灵活性高:
fping可以轻松地接受来自文件、标准输入或命令行的主机列表,并且支持 CIDR 网络地址表示法(如168.1.0/24),这是ping命令不具备的。 - 丰富的输出选项:它可以提供多种格式的输出,包括单行、可解析格式,非常适合编写脚本进行自动化处理。
- 可控的行为:可以精确控制尝试的次数、超时时间、间隔时间等,而
ping命令的这些参数通常比较固定或不易控制。
安装 fping
fping 通常不在 Linux 系统的默认安装中,但可以轻松通过包管理器安装。
-
基于 Debian/Ubuntu 的系统:
sudo apt update sudo apt install fping
-
基于 RHEL/CentOS/Fedora 的系统:
(图片来源网络,侵删)sudo yum install fping # 或者对于 dnf sudo dnf install fping
-
macOS (使用 Homebrew):
brew install fping
常用选项与示例
fping 的基本语法是 fping [options] [hosts...]。
基本用法
示例 1:Ping 单个主机
fping www.google.com
输出会显示是否收到回复以及往返时间(RTT)。
www.google.com (142.250.199.100) is alive (42.3 ms)
示例 2:Ping 多个主机
fping 8.8.8.8 1.1.1.1 192.168.1.1
它会并行检查这三个地址。
示例 3:Ping 一个网段(fping 的王牌功能)
fping -g 192.168.1.0/24
-g:表示生成目标主机列表。fping会自动展开168.1.0/24这个网段,然后并行地 ping 所有 254 个可用地址。
示例 4:从文件中读取主机列表
假设你有一个文件 hosts.txt如下:
www.google.com
github.com
192.168.1.50
10.0.0.1
你可以这样使用:
fping -f hosts.txt
常用选项详解
| 选项 | 全称 | 描述 | 示例 |
|---|---|---|---|
-a |
alive |
只显示在线的主机。 | fping -a 192.168.1.0/24 > online_hosts.txt |
-u |
unreachable |
只显示离线(不可达)的主机。 | fping -u 192.168.1.0/24 > offline_hosts.txt |
-l |
loop |
循环发送 ping 请求,直到被用户中断 (Ctrl+C)。 |
fping -l www.google.com |
-c |
count |
设置每个主机发送的请求数量(默认为 1)。 | fping -c 5 www.google.com (每个主机 ping 5次) |
-p |
period |
设置 ping 包之间的间隔时间(毫秒),默认为 1000ms (1秒)。 | fping -p 200 -c 5 www.google.com (间隔200ms) |
-t |
timeout |
设置等待回复的超时时间(毫秒),默认为 500ms。 | fping -t 1000 192.168.1.1 (等待1秒) |
-s |
src |
指定源 IP 地址发送 ping 请求(需要相应权限)。 | fping -s 192.168.1.100 8.8.8.8 |
-D |
显示时间戳,方便记录日志。 | fping -D www.google.com |
|
-q |
quiet |
静默模式,只汇总输出,不显示每个主机的详细信息。 | fping -q -a 192.168.1.0/24 (只输出在线主机列表) |
-A |
addr |
以 IP 地址而不是主机名显示结果。 | fping -A www.google.com |
-n |
name |
以主机名而不是 IP 地址显示结果(如果解析成功)。 | fping -n 142.250.199.100 |
-x |
当主机不可达时,显示诊断信息(如 "No route to host")。 | fping -x 192.168.1.999 |
输出格式解析
fping 的输出非常清晰,通常包含以下几列:
[主机名/IP] is alive (rtt_min/ms rtt_avg/ms rtt_max/ms loss%)
[主机名/IP] is unreachable
[主机名/IP] is down
示例输出分析:
$ fping -c 3 -q 8.8.8.8 1.1.1.1 192.168.1.999 8.8.8.8 : xmt/rcv/%loss = 3/3/0%, min/avg/max = 10.2/11.5/12.8 ms 1.1.1.1 : xmt/rcv/%loss = 3/3/0%, min/avg/max = 9.8/11.0/12.1 ms 192.168.1.999 : xmt/rcv/%loss = 3/0/100%, min/avg/max = 0.0/0.0/0.0 ms
8.8.8和1.1.1是在线的。168.1.999是离线的。xmt/rcv/%loss:发送/接收/丢包百分比。min/avg/max:往返时间的最小、平均和最大值(毫秒)。
实际应用场景
场景 1:快速扫描局域网内所有在线主机
# 扫描 192.168.1.0/24 网段,并将在线主机IP保存到文件 fping -a -g 192.168.1.0/24 > lan_alive.txt
场景 2:监控关键服务的可用性
创建一个脚本 check_services.sh:
#!/bin/bash
# 定义需要检查的主机列表
HOSTS="www.google.com github.com 8.8.8.8"
# 使用 fping 检查,静默模式只显示在线的
ALIVE_HOSTS=$(fping -q -a $HOSTS)
if [ -z "$ALIVE_HOSTS" ]; then
echo "所有主机都离线!"
# 这里可以添加告警逻辑,比如发送邮件
else
echo "以下主机在线:"
echo "$ALIVE_HOSTS"
fi
场景 3:网络连通性故障排查
当某个网段无法访问时,可以用 fping 快速定位问题点。
# 检查网关是否在线 fping 192.168.1.1 # 检查 DNS 服务器是否在线 fping 8.8.8.8 # 扫描一个特定子网,看哪些设备能通 fping -u 192.168.10.0/28 | grep "is down" # 查看哪些设备是离线的
fping vs. ping
| 特性 | fping |
ping |
|---|---|---|
| 核心用途 | 批量、快速扫描主机状态 | 单个、连续测试与特定主机的连通性 |
| 并发性 | 并行发送请求 | 串行发送请求 |
| 目标列表 | 支持文件、标准输入、CIDR 网段 | 仅支持单个主机名或 IP |
| 输出 | 可定制,适合脚本解析 | 固定格式,交互式强 |
| 安装 | 通常需要额外安装 | 几乎所有系统都预装 |
| 适用场景 | 网络发现、资产清点、批量监控 | 临时测试、实时观察延迟波动 |
fping 是网络管理员和运维工程师的瑞士军刀,如果你需要检查不止一台主机的状态,尤其是在需要处理大量地址或整个网段时,fping 凭借其无与伦比的效率和灵活性,是 ping 命令的最佳替代品和补充,掌握 fping 能极大地提升你的网络诊断和自动化运维能力。
