Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

282 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

🌐 Nettest - Network Speed Measurement

Network Speed Measurement

Overview

Nettest is a high-performance server and client for network speed measurement, written in Rust. The tool supports modern communication protocols and provides real-time accurate measurements with beautiful visualization.

Nettest Demo

πŸ“š Complete Documentation: https://specure.github.io/nettest/docs

✨ Key Features

πŸš€ High Performance

  • Multithreading - Handle multiple clients simultaneously
  • Asynchronous architecture - Efficient resource utilization
  • Connection queue - Smart load distribution between workers

🌐 Multi-Protocol Support

  • TCP connections - Direct connection for maximum performance
  • WebSocket - Browser client support
  • TLS/SSL - Secure connections

πŸ“Š Real-Time Visualization

  • Interactive speed graphs - Real-time download and upload visualization
  • Beautiful UI - Modern, responsive interface
  • Live measurements - See your network performance in real-time

πŸ”§ Flexible Configuration

  • Configurable number of workers
  • Configurable ports and addresses
  • SSL/TLS certificate support

πŸ—ΊοΈ Interactive Servers Map

🌐 Interactive Measurement Interface

Experience real-time network measurements with beautiful visualization

πŸš€ Launch Measurement Interface

πŸš€ Quick Start

Download

Download the latest builds from the GitHub Releases page.

Note:

  1. Download the appropriate archive for your architecture and distribution
  2. Extract:
    • Linux/macOS: tar -xzf nettest-<distribution>-<arch>.tar.gz
    • Windows: Extract the ZIP file
  3. Run:
    • Linux/macOS: ./nettest -s (server) or ./nettest -c <address> (client)
    • Windows: nettest.exe -s (server) or nettest.exe -c <address> (client)

Build

Local Build

# Debug build
cargo build

# Release build with optimizations
cargo build --release

GitHub Actions

The project includes automated builds via GitHub Actions:

  • Ubuntu builds: Latest and LTS versions with native compilation
  • Debian builds: Multiple versions (11, 12) for maximum compatibility
  • macOS builds: Apple Silicon and Intel architectures
  • Windows builds: x86_64 and ARM64 architectures

Run Server

# Basic run
nettest -s

Run Client

# TCP client
nettest -c <SERVER_ADDRESS>

# WebSocket client
nettest -c <SERVER_ADDRESS> -ws

# TLS client 
nettest -c <SERVER_ADDRESS> -tls

# Machine-readable output
nettest -c <SERVER_ADDRESS> -json

Output Formats

By default the client prints a table meant for humans. Two flags switch to machine-readable output, which keeps stdout free of anything but the result:

Flag Output
-raw One line: ping/download/upload, latency in ms and speed in Gbit/s
-json A JSON document with every measured value

The JSON document reports nettest's native units: milliseconds for latency and jitter, bits per second for speed, percent for packet loss and bytes for the transferred volume. A value that was not measured is left out instead of being reported as zero, so a consumer can tell "not measured" apart from "measured as zero". With -legacy, for example, jitter_ms and packet_loss_percent are absent because no VoIP and no UDP test ran.

$ nettest -c 192.168.1.100 -json
{
  "type": "measurement",
  "timestamp": "2026-08-05T12:34:56Z",
  "client": {
    "name": "nettest",
    "version": "2.1.0"
  },
  "server": {
    "host": "192.168.1.100",
    "port": 5005
  },
  "protocol": "tcp",
  "num_threads": 3,
  "failed_threads": 0,
  "ping": {
    "latency_ms": 12.34,
    "jitter_ms": 0.42
  },
  "download": {
    "speed_bps": 942123456,
    "bytes_transferred": 1177654320
  },
  "upload": {
    "speed_bps": 512345678,
    "bytes_transferred": 640432098
  },
  "packet_loss_percent": 0.0
}

jitter_ms is the mean jitter measured by the VoIP test on an idle line. It is not the jitter under download or upload load, because nettest does not measure that.

Progress messages, warnings and errors go to stderr in every mode, so piping stdout into a parser needs no filtering:

nettest -c 192.168.1.100 -json | jq .download.speed_bps

βš™οΈ Configuration

Server Parameters

Parameter Description Default
-l TCP listen address and port 5005
-L TLS listen address and port 443
-c Path to SSL certificate (PEM format) -
-k Path to SSL key file (PEM format) -
-udp UDP port for VoIP/packet loss tests 5004
-u Drop privileges to specified user -
-d Run as daemon in background false
-t Number of worker threads -
-log Log level (info, debug, trace) -

Client Parameters

Parameter Description Default
-c Server address auto-discover
-tls Use TLS connection false
-ws Use WebSocket connection false
-t Number of threads 3
-p TCP/TLS port 5005
-g Generate graphs false
-raw Print one parseable line: ping/download/upload false
-json Print the measurement as JSON on stdout false
-legacy Use legacy PUT command (skip VoIP/packet loss) false
-log Log level (info, debug, trace) -

πŸ”Œ Protocols

TCP Mode

Direct TCP connection for maximum performance:

Client <──TCP──> Server

WebSocket Mode

Browser client support:

Client <──WebSocket──> Server

TLS Mode

Secure connections:

Client <──TLS──> Server

⚑ Performance

Nettest is optimized for high performance:

  • Multithreading: One server can support multiple clients
  • Asynchronous processing: Efficient CPU and memory usage
  • Smart queue: Automatic load distribution between workers
  • Minimal latency: Optimized architecture for accurate measurements

πŸ“Š Visualization

Real-Time Speed Graphs

  • Live speed change visualization
  • Detailed upload and download statistics
  • Interactive charts with smooth animations

Metrics

  • Download speed - Real-time download performance
  • Upload speed - Real-time upload performance
  • Ping - Network round-trip time (median)
  • Jitter - VoIP quality metric (RFC 3550), requires server v2.0+
  • Packet Loss - UDP packet loss rate (RFC 6673), requires server v2.0+

Note: Jitter and Packet Loss tests use UDP port 5004 by default.
Open this port on the server firewall: iptables -A INPUT -p udp --dport 5004 -j ACCEPT

πŸ“‹ Requirements

System Requirements

  • Rust: 1.70+ (latest stable)
  • Linux/macOS/Windows: Support for all major platforms

πŸ“„ License

πŸ“š Documentation


Nettest - Your reliable tool for network speed measurement! πŸš€

About

The new version of the high-performance server and client for network speed measurement. The tool supports modern communication protocols and provides real-time accurate measurements.

Topics

Resources

Stars

13 stars

Watchers

2 watching

Forks

Releases

Packages

Used by

Contributors

Languages