Skip to content

Latest commit

 

History

1 Commit

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 

Repository files navigation

PingMoni

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.1www.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)。

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)

📊 日志可视化分析工具 (log_viewer.html)

项目包含一个纯单文件、完全离线的 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 Release

单文件完全自包含独立发布

dotnet publish -c Release -r win-x64

发布后的免环境依赖独立单文件程序位于 publish/PingMoni_v1.0.0.exe

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages