Giter Site home page Giter Site logo

h1994st / iperf Goto Github PK

View Code? Open in Web Editor NEW

This project forked from owenlwebb/iperf

0.0 1.0 0.0 11.65 MB

iperf3: A TCP, UDP, and SCTP network bandwidth measurement tool

License: Other

Shell 34.74% C 49.84% Gnuplot 0.09% Python 0.34% Makefile 11.97% M4 1.07% Roff 1.88% Dockerfile 0.05%

iperf's Introduction

iPerf3 with embedded TLS/DTLS support via WolfSSL

A fork of iPerf3 that integrates Transport Layer Security and Datagram Transport Layer Security for all benchmark/payload traffic. To be used for benchmarking and research purposes only. Uses WolfSSL, an SSL library specifically tuned for embedded environments.

Loosely based on Mic92/iperf-3.7

Build, Install, Run

Ensure WolfSSL is built with the following ./configure flags: --enable-dtls --enable-oldtls --enable-tls10

$ sudo apt-get install lib32z1 # iPerf dependency
$ git clone [email protected]:owenlwebb/iperf.git && cd iperf/
$ ./configure --without-openssl LIBS=-lwolfssl
$ make
$ sudo make install
$ iperf3 ...

Usage

iperf3 will automatically encrypt benchmark traffic with TLS (or DTLS when -u is specified) when any of the following SSL flags are specified:

Note, all GENERAL SSL flags are optional, but all SERVER and CLIENT flags are required.

If specified, the argument to --ssl-suites-file should be a colon-delimited file containing all of the cipher suites supported (in order of preference) by the client or server. If left unspecified, iperf3 uses the default cipher suite list for the current WolfSSL installation. See the "Default WolfSSL Cipher Suite" list at the bottom of this README for the usual list.

--ssl-tls-version and --ssl-dtls-version are both straightforward. Both of these flags default to 1.2 if unspecified.

GENERAL

--ssl-suites-file <CIPHER_SUITES_FILE>
--ssl-tls-version [1.0, 1.1, 1.2, 1.3]
--ssl-dtls-version [1.0, 1.2]

SERVER

--ssl-server-key <KEY_FILE>.pem
--ssl-server-cert <CERT_FILE>.pem

CLIENT

--ssl-client-cert <CERT_FILE>.pem

Note on DTLS Usage

WolfSSL's DTLS implementation imposes a maximum datagram size of approximately 8KB. It's unclear (to me) whether this restriction is implemenation-specific or defined in the DTLS RFC. In any case, testing reveals that WolfSSL will refuse to send any DTLS traffic when iperf3's blocksize is set any higher than 8092 bytes. Until this is resolved, clients running in UDP mode should use the -l flag to specify a blocksize of less than or equal to 8092B

Future Work / TODO

  • Consolidate code in iperf_udp.c and iperf_tcp.c to reduce code duplication
  • More graceful error handling (currently calls exit upon almost any error)
  • Although I haven't tested it, I expect my current implementation may be incompatible with bidirectional and/or reverse modes.
  • Support more certificate/key file types besides .pem
  • More robust argument parsing
    • Prohibit zerocopy mode with TLS/DTLS (incompatible.)
    • Warn users if -l XB for X < 8092 is not specified in UDP mode.
    • Check for incompatible or missing TLS/DTLS args.

Default WolfSSL Cipher Suites:

  • TLS13-AES128-GCM-SHA256
  • TLS13-AES256-GCM-SHA384
  • TLS13-CHACHA20-POLY1305-SHA256
  • DHE-RSA-AES128-SHA
  • DHE-RSA-AES256-SHA
  • ECDHE-RSA-AES128-SHA
  • ECDHE-RSA-AES256-SHA
  • ECDHE-ECDSA-AES128-SHA
  • ECDHE-ECDSA-AES256-SHA
  • DHE-RSA-AES128-SHA256
  • DHE-RSA-AES256-SHA256
  • DHE-RSA-AES128-GCM-SHA256
  • DHE-RSA-AES256-GCM-SHA384
  • ECDHE-RSA-AES128-GCM-SHA256
  • ECDHE-RSA-AES256-GCM-SHA384
  • ECDHE-ECDSA-AES128-GCM-SHA256
  • ECDHE-ECDSA-AES256-GCM-SHA384
  • ECDHE-RSA-AES128-SHA256
  • ECDHE-ECDSA-AES128-SHA256
  • ECDHE-RSA-AES256-SHA384
  • ECDHE-ECDSA-AES256-SHA384
  • ECDHE-RSA-CHACHA20-POLY1305
  • ECDHE-ECDSA-CHACHA20-POLY1305
  • DHE-RSA-CHACHA20-POLY1305
  • ECDHE-RSA-CHACHA20-POLY1305-OLD
  • ECDHE-ECDSA-CHACHA20-POLY1305-OLD
  • DHE-RSA-CHACHA20-POLY1305-OLD

Other cipher suites can be enabled through WolfSSL ./configure flags.

iperf's People

Contributors

atcorner avatar bltierney avatar bmah888 avatar candlerb avatar davidbar-on avatar dmdailey avatar fornwall avatar g-coder avatar gabrielganne avatar hasso avatar he32 avatar jdugan1024 avatar jefposkanzer avatar kevinconstantine avatar klausman avatar likhait avatar millert avatar montegoode avatar owenlwebb avatar pprindeville avatar quartoxuna avatar ralcini avatar rollingslack avatar sethdelliott avatar srgnk avatar stefano-garzarella avatar tniessen avatar woody77 avatar xiaoxiang781216 avatar yeahdongcn avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.