A tool to stress-test TURN (RFC 5766) servers and measure resulting packet loss and RTT.
There are pre-built versions on Github Releases
```
Usage: turnhammer
Options: -j, --parallel-connections number of simultaneous connections -s, --pkt-size packet size --pps packets per second -d, --duration experiment duration, seconds --delay-after-stopping-sender seconds to wait and receive after stopping sender --delay-between-allocations microseconds to wait between TURN allocations --calc don't actually run, only calculate bandwidth and traffic -f, --force override bandwidth or traffic limitation --video set pps to 90 and pktsize to 960 --audio set pps to 16 and pktsize to 192 -J, --json output as JSON instead of plain text -C, --no-channels do not use chanels --help display usage information ```
Output sample:
The test would do approx 11.878 Mbit/s and consume 158.379 megabytes of traffic
My external address: 178.122.56.8:40475
Allocated 200 TURN clients
Received the first datagram
Received 365652 packets from 384000 window of total 384000 || Loss: 04.7781% bad loss: 00.0000%
RTT4 brackets: 0-49ms: 00.0000% 180-399ms: 50.7474% 1000-1999ms: 00.0000%
50-179ms: 44.4745% 500-999ms: 00.0000% 2000+ms: 00.0000%
<<< Overall score: 8.2 / 10.0 >>>
Stopping TURN clients
JSON output sample:
$ turnhammer -J --video -j 3 104.131.203.210:3478 u153 p1994421 2> /dev/null
{"status":"ok"
,"received_packets":1350 ,"min_max_window":1350 ,"sent_packets":1350
,"loss":0 ,"bad_loss":0
,"rtt4":{"0_49":0 ,"50_179":0 ,"180_399":100 ,"400_999":0 ,"1000_1999":0 ,"2000+":0}
,"score":9.5
}
0.0.0.0:0
.0.0.0.0:0
and obtain K allocations from specified TURN serverThere is old Tokio 0.1-based version of turnhammer, tagged v0.1.0
that can be built with older Rust and may support more old systems. It should work with rustc 1.34.2.