A network bandwidth and latency tester.

Related tags

Cryptography network
Overview

Crusader Network Tester

Setup

Run cargo build --release to build the executables which are placed in target/release.

Command line usage

To host a server run:

crusader serve

It uses TCP and UDP port 30481.

To do a test run:

crusader test <server-host>

This produces an graph output file named plot.png.

Graphical interface

There is also a binary with a graphical interface allowing you to use a client, a server and interact with results.

Comments
  • which rus version is required

    which rus version is required

    I just tried to update to the newest version:

    bash-3.2$ git pull
    remote: Enumerating objects: 250, done.
    remote: Counting objects: 100% (250/250), done.
    remote: Compressing objects: 100% (134/134), done.
    remote: Total 250 (delta 177), reused 180 (delta 107), pack-reused 0
    Receiving objects: 100% (250/250), 446.88 KiB | 16.55 MiB/s, done.
    Resolving deltas: 100% (177/177), completed with 15 local objects.
    From https://github.com/Zoxc/crusader
       c2b50ad..bba1768  master     -> origin/master
     * [new branch]      test       -> origin/test
     * [new tag]         v0.0.7-testing -> v0.0.7-testing
    Updating c2b50ad..bba1768
    Fast-forward
     android/Cargo.lock                                        |  22 +++---
     android/Cargo.toml                                        |   3 +-
     android/app/src/main/java/zoxc/crusader/MainActivity.java |  12 ++--
     android/src/lib.rs                                        |   2 +-
     data/v0.crr                                               | Bin 0 -> 171552 bytes
     data/v1.crr                                               | Bin 0 -> 119261 bytes
     data/v2.crr                                               | Bin 0 -> 325182 bytes
     src/Cargo.lock                                            |  28 ++++----
     src/crusader-gui-lib/src/lib.rs                           |  78 ++++++++++++++------
     src/crusader-lib/Cargo.toml                               |   3 +-
     src/crusader-lib/src/file_format.rs                       |  23 +++---
     src/crusader-lib/src/plot.rs                              | 124 +++++++++++++++++++-------------
     src/crusader-lib/src/protocol.rs                          |  26 +++++--
     src/crusader-lib/src/serve.rs                             | 496 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-------------------------------------
     src/crusader-lib/src/test.rs                              | 346 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-------------------
     src/crusader/Cargo.toml                                   |   2 +-
     16 files changed, 830 insertions(+), 335 deletions(-)
     create mode 100644 data/v0.crr
     create mode 100644 data/v1.crr
     create mode 100644 data/v2.crr
    Press any key to continue...
    
    bash-3.2$ cargo build --release
        Updating git repository `https://github.com/Zoxc/winit`
        Updating crates.io index
        Updating git repository `https://github.com/Zoxc/egui.git`
      Downloaded socket2 v0.4.6
      Downloaded 1 crate (44.5 KB) in 0.56s
       Compiling socket2 v0.4.6
       Compiling emath v0.19.0 (https://github.com/Zoxc/egui.git?branch=crusader#1bd048c7)
       Compiling winit v0.27.2 (https://github.com/Zoxc/winit?branch=crusader#75c0ae47)
       Compiling tokio v1.20.1
       Compiling epaint v0.19.0 (https://github.com/Zoxc/egui.git?branch=crusader#1bd048c7)
       Compiling glutin v0.29.1
       Compiling egui v0.19.0 (https://github.com/Zoxc/egui.git?branch=crusader#1bd048c7)
       Compiling egui_glow v0.19.0 (https://github.com/Zoxc/egui.git?branch=crusader#1bd048c7)
       Compiling egui-winit v0.19.0 (https://github.com/Zoxc/egui.git?branch=crusader#1bd048c7)
       Compiling eframe v0.19.0 (https://github.com/Zoxc/egui.git?branch=crusader#1bd048c7)
       Compiling tokio-util v0.7.3
       Compiling crusader-lib v0.0.7 (/Users/Shared/space/data_local/moeller/PRIVATE/samba/privat/MOEWE/techno_kram/CODE/crusader/src/crusader-lib)
    error[E0658]: use of unstable library feature 'bool_to_option'
       --> crusader-lib/src/serve.rs:199:73
        |
    199 | ...                   (client.ip == ip_to_ipv6_mapped(addr.ip())).then_some(client)
        |                                                                   ^^^^^^^^^
        |
        = note: see issue #80967 <https://github.com/rust-lang/rust/issues/80967> for more information
    
    error[E0658]: use of unstable library feature 'bool_to_option'
       --> crusader-lib/src/serve.rs:421:64
        |
    421 |                     (ip_to_ipv6_mapped(src.ip()) == client.ip).then_some((client, ping))
        |                                                                ^^^^^^^^^
        |
        = note: see issue #80967 <https://github.com/rust-lang/rust/issues/80967> for more information
    
    For more information about this error, try `rustc --explain E0658`.
    error: could not compile `crusader-lib` due to 2 previous errors
    warning: build failed, waiting for other jobs to finish...
    
    macbook:~ user$ rustc --version
    rustc 1.61.0 (fe5b13d68 2022-05-18)
    
    opened by moeller0 2
  • Staggere start

    Staggere start

    I really wish crusader had a mode to show what staggered start looked like. Staring up a zillion flows at exactly the same time is not how things really work on the internet.

    https://forum.mikrotik.com/viewtopic.php?p=951748

    Relevant paper: http://caia.swin.edu.au/reports/140630A/CAIA-TR-140630A.pdf

    opened by dtaht 1
  • Feature proposal

    Feature proposal

    Maybe the run time of the test could be made configurable? Often tests of longer durations like 0.5-10 minutes (so considerably longer than the typical 10-20 seconds for online speedtests) can be quite revealing and show e.g. things that cyclically affect throughput or latency (like an WiFi AP's channel scans say every 10 seconds).

    opened by moeller0 1
  • Crash with ipv6

    Crash with ipv6

    oot@lqos:~# crusader test --stream-stagger 5 --streams 2 --load-duration 10 fd77::2 Connected to server [fd77::2]:35481 thread 'main' panicked at 'called Result::unwrap() on an Err value: "Unable to measure latency to server"', crusader-lib/src/test.rs:1304:10 stack backtrace: 0: 0x7fdf8f501ddd - 1: 0x7fdf8f53bc0c - 2: 0x7fdf8f4fc771 - 3: 0x7fdf8f503335 - 4: 0x7fdf8f503056 - 5: 0x7fdf8f5038c6 - 6: 0x7fdf8f5037b7 - 7: 0x7fdf8f502294 - 8: 0x7fdf8f5034e9 - 9: 0x7fdf8f388103 - 10: 0x7fdf8f3881f3 - 11: 0x7fdf8f3e6c8a - 12: 0x7fdf8f38e850 - 13: 0x7fdf8f392c63 - Aborted (core dumped)

    opened by dtaht 4
  • Update README to give full instructions for running

    Update README to give full instructions for running

    The README now has a more expansive instructions for running the server and client. I'm not sure how to explain the green/blue colors of the latency plot.

    opened by richb-hanover 2
  • Warn if no server running

    Warn if no server running

    I got the following error message when I ran the client without a server running at the other end.

    A simple "No server seems to be running at <ip-address>" would suffice

    ?134 release % ./crusader test 192.168.253.128
    thread 'main' panicked at 'called `Result::unwrap()` on an `Err` value: Os { code: 61, kind: ConnectionRefused, message: "Connection refused" }', crusader-lib/src/test.rs:1304:10
    note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
    zsh: abort      ./crusader test 192.168.253.128
    
    opened by richb-hanover 0
  • thread 'tokio-runtime-worker' panicked at 'unable to udp ping:

    thread 'tokio-runtime-worker' panicked at 'unable to udp ping:

    Running crusader test <host> on macOS 12.6.1 laptop on Wi-Fi to small odroid running crusader serve on Ethernet with Ubuntu 20.04.05. I got the following error messages the very first three times I ran it after compiling it (on macOS).

    √ release % ./crusader test 192.168.253.128
    Connected to server 192.168.253.128:35481
    Latency to server 2.69 ms
    Testing download...
    Testing upload...
    thread 'tokio-runtime-worker' panicked at 'unable to udp ping: Os { code: 55, kind: Uncategorized, message: "No buffer space available" }', crusader-lib/src/test.rs:1232:32
    note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
    zsh: abort      ./crusader test 192.168.253.128
    ?134 release % ./crusader test 192.168.253.128
    Connected to server 192.168.253.128:35481
    Latency to server 2.62 ms
    Testing download...
    Testing upload...
    Testing both download and upload...
    thread 'tokio-runtime-worker' panicked at 'unable to udp ping: Os { code: 55, kind: Uncategorized, message: "No buffer space available" }', crusader-lib/src/test.rs:1232:32
    note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
    zsh: abort      ./crusader test 192.168.253.128
    ?134 release % ./crusader test 192.168.253.128
    Connected to server 192.168.253.128:35481
    Latency to server 2.63 ms
    Testing download...
    Testing upload...
    Testing both download and upload...
    Writing data...
    Saved raw data as data 2022.12.06 21-00-02.crr
    Saved plot as plot 2022.12.06 21-00-02.png
    √ release %
    

    Server said...

    llladmin@odroid:~/Documents/src/crusader/src/target/release$ ./crusader serve
    Server running...
    Serving 192.168.253.116:50773, version 3
    Error from client 192.168.253.116:50773: Connection reset by peer (os error 104)
    Serving 192.168.253.116:50859, version 3
    Error from client 192.168.253.116:50859: Connection reset by peer (os error 104)
    Serving 192.168.253.116:50929, version 3
    Serving complete for 192.168.253.116:50929
    ^CServer aborting...
    

    Plot (from third run) Not sure if this is good or bad...

    plot 2022 12 06 21-00-02

    opened by richb-hanover 0
  • How are latencies in Up- and Downlink measured?

    How are latencies in Up- and Downlink measured?

    First of all, a big thanks for this great software, which works really nice!

    In the graphs, the latency for Up and Down is shown. I'm wondering how this is done considering that client and server are usually different machines with unsynchronized clocks?

    opened by joergdeutschmann-i7 4
Releases(v0.0.9-testing)
Owner
null
Extremely low-latency chain data to Stackers, with a dose of mild humour on the side

Ronin Hello there! Ronin is a ultra-speed Stacks API server. It's super lightweight, but scales easily. Why are we making this? Because we don't like

Syvita Guild 11 Mar 29, 2022
ARYA Network is a polkadot/substrate based chain for Non-fungible Token platform on which we can own sell and buy the NFT's on polkadot network.

ARYA Network ARYA Network is a polkadot/substrate based chain for Non-fungible Token platform on which we can own sell and buy the NFT's on polkadot n

Pankaj Chaudhary 6 Dec 20, 2022
Cross-chain bridge message delivery network. We are hiring, [email protected]

Introduction Implementation of a https://darwinia.network node in Rust based on the Substrate framework. This repository contains runtimes for the Dar

Darwinia Network 225 Nov 8, 2022
The Zenotta Network Protocol (ZNP), the network that supports the Zenotta blockchain

Zenotta Network Protocol A repo for the development of the Zenotta Network Protocol (ZNP). We will regularly be updating links and easter eggs inside

Zenotta AG 10 Apr 2, 2023
dWallet Network, a composable modular signature network is the home of dWallets

Welcome to dWallet Network dWallet Network, a composable modular signature network is the home of dWallets. A dWallet is a noncollusive and massively

dWallet Labs 8 Feb 26, 2024
Diem’s mission is to build a trusted and innovative financial network that empowers people and businesses around the world.

Note to readers: On December 1, 2020, the Libra Association was renamed to Diem Association. The project repos are in the process of being migrated. A

Diem 16.7k Jan 8, 2023
Diem’s mission is to build a trusted and innovative financial network that empowers people and businesses around the world.

Note to readers: On December 1, 2020, the Libra Association was renamed to Diem Association. The project repos are in the process of being migrated. A

Diem 16.7k Jan 9, 2023
Library with support for de/serialization, parsing and executing on data-structures and network messages related to Bitcoin

Rust Bitcoin Library with support for de/serialization, parsing and executing on data-structures and network messages related to Bitcoin. Heads up for

Rust Bitcoin Community 1.3k Dec 29, 2022
Selendra is a multichains interoperable nominated Proof-of-Stake network for developing and running Substrate-based and EVM compatible blockchain applications.

Selendra An interoperable nominated Proof-of-Stake network for developing and running Substrate-based and EVM compatible blockchain applications. Read

Selendra 16 Nov 29, 2022
The Nervos CKB is a public permissionless blockchain, and the layer 1 of Nervos network.

Nervos CKB - The Common Knowledge Base master develop About CKB CKB is the layer 1 of Nervos Network, a public/permissionless blockchain. CKB uses Pro

Nervos Network 1k Dec 30, 2022
The Phala Network Blockchain, pRuntime and the bridge.

Phala Blockchain Phala Network is a TEE-Blockchain hybrid architecture implementing Confidential Contract. This repo includes: node/: the main blockch

Phala Network 314 Jan 6, 2023
Employ your built-in wetware pattern recognition and signal processing facilities to understand your network traffic

Nethoscope Employ your built-in wetware pattern recognition and signal processing facilities to understand your network traffic. Check video on how it

Vesa Vilhonen 86 Dec 5, 2022
A value transfer bridge between the Monero blockchain and the Secret Network.

Secret-Monero-Bridge A value transfer bridge between the Monero blockchain and the Secret Network. Proof-of-Concept Video Demonstration: https://ipfs.

null 28 Dec 7, 2022
Nym provides strong network-level privacy against sophisticated end-to-end attackers, and anonymous transactions using blinded, re-randomizable, decentralized credentials.

The Nym Privacy Platform The platform is composed of multiple Rust crates. Top-level executable binary crates include: nym-mixnode - shuffles Sphinx p

Nym 653 Dec 26, 2022
A distributed, cryptographically-verifiable blog / social network

FeoBlog FeoBlog is a distributed blogging platform. It takes a lot of its inspiration from Mastodon and Scuttlebutt. It aims to solve a couple of prob

Cody Casterline 71 Dec 11, 2022
Substrate Node for Anmol Network

Anmol Substrate Node ?? ??️ ?? Anmol is the First Cross-Chain NFT Toolkit, on Polkadot. Introducing: Moulds NFT Breeding Multi-Chain NFT Migration ink

Anmol Network 12 Aug 28, 2022
Scans the Ethereum network for USDT ERC-20 token transfer transactions

ethscan This is a Rust command line program for scanning the Ethereum blockchain for USDT transfers within a time span and amount span. prerequisites

Frank Buss 4 Oct 6, 2022
NymDrive is a complete, end-to-end encrypted file syncing daemon that runs over the Nym network.

NymDrive NymDrive is a complete, end-to-end encrypted file syncing daemon that runs over the Nym network. Features Active file monitoring of changes i

Hans Bricks 16 Jul 12, 2022
A network application framework for Rust

This crate is deprecated! This crate is deprecated without an immediate replacement. Discussion about a successor can be found in tokio-rs/tokio#118.

Tokio 700 Dec 12, 2022