Skip to content

qzavyer/NetworkChecker

Repository files navigation

NetworkChecker

NetworkChecker is a .NET console application for long-running network quality monitoring.

By default, it runs for 24 hours:

  • sends one ping per second;
  • performs a bandwidth test every 30 minutes;
  • shows progress and errors in the console;
  • periodically saves collected data;
  • generates a self-contained HTML report.

The application supports partial reports when a run is stopped with Ctrl+C.

Requirements

  • Windows
  • .NET 10 SDK or Runtime
  • Optional: LibreSpeed CLI for bandwidth measurements

Ping measurements use the .NET System.Net.NetworkInformation.Ping API and do not require an external ping executable.

LibreSpeed CLI

NetworkChecker does not contain or redistribute any speed test implementation. Speed tests are provided by external tools.

To enable bandwidth testing, download librespeed-cli and specify its path via CheckerOptions.SpeedTestPath or the --speedtest command-line argument.

NetworkChecker can use LibreSpeed CLI for bandwidth measurements.

LibreSpeed CLI:

https://github.com/librespeed/speedtest-cli

License: LGPL-3.0

LibreSpeed CLI is a separate project with its own license and distribution terms. It is not included in NetworkChecker.

Build

dotnet restore NetworkChecker.slnx
dotnet build NetworkChecker.slnx

The repository does not require third-party NuGet packages.

Usage

Run a standard 24-hour check:

dotnet run --project NetworkChecker

Run with an explicit LibreSpeed CLI path:

dotnet run --project NetworkChecker -- `
  --speedtest "C:\Tools\LibreSpeed\librespeed-cli.exe"

Run the short two-minute test mode:

dotnet run --project NetworkChecker -- --test

Stop a running check with Ctrl+C. NetworkChecker will finish the current operation where possible and generate a partial report from the collected data.

Command-Line Options

Option Default Description
--duration 24h Total monitoring duration
--ping-interval 1s Delay between ping attempts
--speed-interval 30m Delay between bandwidth tests
--ping-timeout 2s Timeout for one ping attempt
--speed-timeout 2m Timeout for one bandwidth test
--host 1.1.1.1 Host used for ping measurements
--speedtest C:\Tools\LibreSpeed\librespeed-cli.exe Path to LibreSpeed CLI
--output reports Parent directory for reports
--test - Two-minute run with a speed test every 30 seconds
--help - Display command-line help

Duration values support s, m, h, and d, for example 30s, 5m, 24h, or 1d. The hh:mm:ss format is also accepted.

Example with custom settings:

dotnet run --project NetworkChecker -- `
  --duration 6h `
  --host 8.8.8.8 `
  --ping-interval 1s `
  --speed-interval 15m `
  --speedtest "C:\Tools\LibreSpeed\librespeed-cli.exe" `
  --output reports

Output

Each run creates a timestamped directory:

reports/
  20260613-130406/
    data.json
    report.html
  • data.json contains interval results, raw ping samples, summary statistics, and suitability assessments.
  • report.html is a self-contained report that can be opened directly in a browser.

Files are written as UTF-8 with BOM and Windows CRLF line endings.

Report Metrics

The report includes:

  • availability, outage count, longest outage, and total outage time;
  • average, P50, P95, and maximum ping;
  • average and P95 jitter;
  • packet loss;
  • average, P50, P95, and minimum download speed;
  • average, P50, P95, and minimum upload speed;
  • per-interval network measurements.

Ping values are expressed in milliseconds. Bandwidth values returned by LibreSpeed JSON are expressed in Mbps.

Suitability Assessment

NetworkChecker evaluates collected metrics against a configurable set of rules and reports:

  • Good (+) when all requirements pass;
  • Poor (-) when at least one requirement fails;
  • Insufficient data (?) when a required measurement is unavailable.

The default scenarios are:

  • Web Browsing
  • Video Calls
  • Remote Desktop
  • Online Gaming
  • 4K Streaming

Example rules:

Video Calls
  Loss < 1%
  Average Jitter < 20 ms
  P95 Ping < 100 ms

Remote Desktop
  Loss < 1%
  P95 Ping < 150 ms

Online Gaming
  Loss < 0.5%
  P95 Ping < 80 ms
  Average Jitter < 10 ms

Suitability rules are implemented in SuitabilityRuleEngine and can be extended with additional scenarios or thresholds.

Tests

Run the built-in test project:

dotnet run --project NetworkChecker.Tests

The tests cover configuration parsing, interval and summary statistics, outages, percentiles, suitability rules, LibreSpeed JSON parsing, and HTML generation.

About

Long-running network quality monitoring tool for Windows

Topics

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages