| Crates.io | pingultra |
| lib.rs | pingultra |
| version | 0.1.0 |
| created_at | 2025-11-09 09:52:38.417512+00 |
| updated_at | 2025-11-09 09:52:38.417512+00 |
| description | A fast ping utility implemented in Rust |
| homepage | https://github.com/guonaihong/pingultra |
| repository | https://github.com/guonaihong/pingultra |
| max_upload_size | |
| id | 1923917 |
| size | 242,855 |
PingUltra 是一个用 Rust 实现的高性能网络 ping 工具,是 fping 的兼容升级版本。它支持并行 ping 多个主机,提供丰富的统计信息和多种输出格式。

libpcap-dev
# Ubuntu/Debian
sudo apt-get install libpcap-dev
# Fedora/RHEL
sudo dnf install libpcap-devel
最简单的安装方式,直接从源码编译并安装到 ~/.cargo/bin/:
cargo install --git https://github.com/guonaihong/pingultra.git
安装完成后,可以直接运行(需要 root 权限):
sudo pingultra 8.8.8.8
如果你想手动编译和安装:
确保你已经安装了 Rust 和 Cargo:
# 克隆仓库
git clone https://github.com/guonaihong/pingultra.git
cd pingultra
# 编译
cargo build --release
# 安装到系统路径(可选)
sudo cp target/release/pingultra /usr/local/bin/
编译完成后,可以通过以下方式运行:
# 使用编译后的二进制文件
sudo ./target/release/pingultra 8.8.8.8
# 或者安装到系统路径后
sudo pingultra 8.8.8.8
由于 PingUltra 需要创建原始套接字(raw socket)来发送 ICMP 包,所以在大多数系统上需要 root 权限运行:
# 基本用法
sudo pingultra 8.8.8.8
# 指定 ping 次数
sudo pingultra -c 5 8.8.8.8
# 同时 ping 多个主机
sudo pingultra 8.8.8.8 1.1.1.1 example.com
# 从文件读取目标主机
sudo pingultra -f hosts.txt
# 设置超时时间(毫秒)
sudo pingultra -w 1000 8.8.8.8
# 设置 ping 间隔(毫秒)
sudo pingultra -p 500 8.8.8.8
# 设置 ICMP 包大小
sudo pingultra -s 100 8.8.8.8
# 设置 TTL 值
sudo pingultra -t 32 8.8.8.8
# 生成 JSON 格式的摘要报告
sudo pingultra 8.8.8.8 summary --format json
# 监控内网设备变化(新增/消失)
sudo pingultra monitor -n 192.168.1.0/24
# 监控内网设备变化,并解析 MAC 地址厂商信息
sudo pingultra monitor -n 192.168.1.0/24 -m
# 只显示设备变化(新增/消失),不显示稳定设备
sudo pingultra monitor -n 192.168.1.0/24 --changes-only
# 使用交互式字符界面监控设备
sudo pingultra monitor -n 192.168.1.0/24 -u -i 1
选项:
-f, --file <FILE> 从文件读取目标主机
-c, --count <COUNT> 发送 ping 的次数 [默认: 3]
-p, --period <PERIOD> ping 间隔时间(毫秒)[默认: 1000]
-w, --timeout <TIMEOUT> 超时时间(毫秒)[默认: 5000]
-r, --retry <RETRY> 失败重试次数 [默认: 1]
-s, --size <SIZE> ICMP 包大小(字节)[默认: 56]
-t, --ttl <TTL> 生存时间值 [默认: 64]
-q, --quiet 安静模式 - 只显示摘要
-T, --timestamp 显示时间戳
-h, --help 显示帮助信息
-V, --version 显示版本信息
子命令:
summary 生成摘要报告
monitor 监控内网设备变化
help 显示命令帮助
选项:
-n, --network <NETWORK> 要扫描的 IP 范围(CIDR 格式,如 192.168.1.0/24)
-i, --interval <INTERVAL> 扫描间隔时间(秒)[默认: 60]
-f, --format <FORMAT> 输出格式(text, json, csv)[默认: text]
-c, --changes-only 只显示变化(不显示稳定设备)
-m, --resolve-mac 尽可能解析 MAC 地址到厂商名称
-u, --ui 使用交互式字符界面显示设备状态
当使用 -u 选项启动监控时,将进入交互式字符界面模式。在此模式下:
界面会显示设备的以下状态:
PingUltra 现在可以精确追踪设备的短暂连不上情况:
底部显示实时统计:
设备总数: 25 | 在线: 23 | 不稳定: 1 | 离线: 1 | 新设备: 0 | 丢失: 0
按 Enter 键查看选中设备的详细信息,包括:
┌─ 192.168.1.101 详情 ─────────────────────────────────┐
│ MAC: aa:bb:cc:dd:ee:ff │
│ 厂商: Apple Inc. │
│ Hostname: iphone-user │
│ 状态: Unstable (连续失败 2 次) │
│ │
│ 离线事件历史: │
│ ┌─────────────────────────────────────────────────┐ │
│ │ #1 | 11:23:45 - 11:24:12 | 27s | 恢复 ✓ │ │
│ │ #2 | 11:25:10 - 11:25:18 | 8s | 恢复 ✓ │ │
│ │ #3 | 11:26:00 - (进行中) | 45s | 离线中 ⏱️ │ │
│ └─────────────────────────────────────────────────┘ │
│ │
│ 统计: 共 3 次离线,平均时长 13.7s │
└──────────────────────────────────────────────────────┘
详情页面显示:
src/
├── cli.rs # 命令行参数处理
├── error.rs # 错误类型定义
├── host.rs # 主机和响应处理
├── icmp.rs # ICMP 包构造和解析
├── main.rs # 程序入口
├── monitor.rs # 内网设备监控功能
├── output.rs # 输出格式化
├── pinger.rs # 核心 ping 功能实现
├── stats.rs # 统计信息收集和处理
└── ui.rs # 交互式字符界面实现
PingUltra 使用 Rust 的异步编程模型和高效的网络库,能够以最小的资源消耗同时 ping 大量主机。与传统的 ping 工具相比,PingUltra 在处理大量主机时表现出色。
使用 -u 启用 UI 模式时,所有离线事件会自动保存到 SQLite 数据库(pingultra_monitor.db),包括:
这样你可以查看设备的完整离线历史,而不仅仅是当前会话的数据。
欢迎提交 Pull Request 或 Issue 来帮助改进这个项目。
MIT License