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.
- 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.
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.
dotnet restore NetworkChecker.slnx
dotnet build NetworkChecker.slnxThe repository does not require third-party NuGet packages.
Run a standard 24-hour check:
dotnet run --project NetworkCheckerRun 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 -- --testStop a running check with Ctrl+C. NetworkChecker will finish the current operation where possible and generate a partial report from the collected data.
| 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 reportsEach run creates a timestamped directory:
reports/
20260613-130406/
data.json
report.html
data.jsoncontains interval results, raw ping samples, summary statistics, and suitability assessments.report.htmlis 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.
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.
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.
Run the built-in test project:
dotnet run --project NetworkChecker.TestsThe tests cover configuration parsing, interval and summary statistics, outages, percentiles, suitability rules, LibreSpeed JSON parsing, and HTML generation.