PingMoni 是一个基于 .NET 9.0 构建的轻量、高性能网络连通性持续监控命令行工具(CLI Tool)。它通过调用 Windows 底层原生 ICMP API,实现对指定目标 IP 或域名的持续 Ping 监控,并将结果以结构化的 JSON 日志格式按天持久化保存。
- ⚡ 原生高能与轻量:基于 Windows
iphlpapi.dll原生 ICMP API (IcmpSendEcho) 实现,低 CPU/内存占用。 - 📦 完全自包含单文件发布:打包为独立单文件程序,无需在目标系统安装 .NET 运行时即可开箱即用。
- 📊 结构化 JSON 日志:详细记录每次 Ping 的时间戳、延迟、状态、数据包大小和 TTL,方便对接 ELK、Prometheus、Fluentd 或可视化工具分析。
- 🌐 动态 DNS 自动感知:常驻运行期间每 5 分钟自动刷新域名 IP,且在网络异常时自动降级保留最后有效 IP,保障监控连续性。
- 🚀 高频 I/O 句柄复用:采用
LogWriter句柄常驻与跨天日志自动平滑切分 (Log Rotation),大幅提升高频 Ping 采样时的磁盘 I/O 性能。 - ⏱️ 精准时序补偿:基于绝对时间戳计算动态延迟,避免传统固定 Delay 造成的采样周期漂移。
- 🛡️ 稳定优雅:内置安全输入过滤、路径防穿越、文件 IO 异常捕获以及
Ctrl+C信号监听优雅关停。
PingMoni <target> [-i <interval_ms>] [-o <log_dir>] [-h|--help]
| 参数 | 长参数 | 说明 | 默认值 |
|---|---|---|---|
<target> |
- | 必填。要监控的目标 IP 地址或域名(如 192.168.1.1 或 www.bing.com) |
无 |
-i |
--interval |
监控 Ping 发送间隔(单位:毫秒) | 1000 |
-o |
--output |
放置按天分割 JSON 日志文件的保存目录 | <ExeDir>\PingmoniLogs(程序 .exe 所在目录下的 PingmoniLogs 文件夹) |
-h |
--help |
显示命令行帮助文档并退出 | - |
# 1. 监控目标域名(默认每秒 ping 一次,日志保存在程序同级 PingmoniLogs 路径)
PingMoni www.bing.com
# 2. 自定义采样间隔为 500ms
PingMoni 192.168.1.1 -i 500
# 3. 指定日志输出路径为 D:\NetworkLogs,每 2 秒监控一次
PingMoni 10.0.0.1 -i 2000 -o D:\NetworkLogs
# 4. 查看使用帮助
PingMoni --help日志文件将根据目标名称和日期自动创建,命名规则为:<sanitized_target>_YYYY-MM-DD.log(每行一条 JSON)。
{"timestamp":"2026-07-23 09:25:00.123","target":"www.bing.com","latency":105,"status":"success","details":{"bytes":32,"ttl":118}}
{"timestamp":"2026-07-23 09:25:01.125","target":"www.bing.com","latency":0,"status":"failure","details":{"bytes":0,"ttl":0}}timestamp: 采样时间戳(毫秒级,yyyy-MM-dd HH:mm:ss.fff)target: 监控目标地址latency: 响应延迟时间(毫秒)status: 状态 (success/failure)details.bytes: 接收到的回复数据包大小(字节)details.ttl: 回复数据包的生存时间 (TTL)
项目包含一个纯单文件、完全离线的 HTML 分析器 log_viewer.html:
- ⚡ 离线免依赖:无需安装 Node.js、无需联网,双击直接在任意浏览器打开。
- 🔀 4 个专属槽位:顶部提供横向并排的
槽位 #1~槽位 #4,支持拖入指定槽位对比,支持独立清空/替换。 - ⏱️ 时间轴绝对物理对齐:采用绝对时间戳-物理像素映射,求并集总时间轴对齐数据,未覆盖时间段自动真实留白。
- 🔗 多图全量同步联动:缩放或拖拽任意图表/全局滑动条,所有图表毫秒级无缝同步平移与缩放。
- 📌 底部悬浮控制栏:全局时间轴滑动条固定悬浮吸附于浏览器底部,纵向滚动视图时随时可用。
- 🚨 失败高亮警示:对网络超时/丢包节点(
failure)使用红色柱体突出显示。 - 🔄 一键统一刷新重绘:底部控制栏提供刷新按钮,多日志导入后可随时一键重新计算全量时间轴与全视窗重绘。
- 📷 所见即所得导出图片:支持导出当前用户视图视角下的全景对比长图及单槽位图片(自带高清 2x 导出,自动排除底部横滚条)。
- 📈 独立 Header 统计:每行图表头部独立展现 Target、丢包率、采样数与最值。
# 开发环境直接运行
dotnet run -- www.bing.com -i 500
# 编译为 Debug/Release 版本
dotnet build -c Releasedotnet publish -c Release -r win-x64发布后的免环境依赖独立单文件程序位于 publish/PingMoni_v1.0.0.exe。