2个不稳定版本
0.2.0 | 2021年8月19日 |
---|---|
0.1.0 | 2019年2月6日 |
#19 in #turn
23KB
446 代码行
TURN_Hammer
用于压力测试TURN (RFC 5766)服务器并测量结果数据包丢失和往返时间。
在Github发行版中有预构建版本
用法
Usage: turnhammer <server> <username> <password> [-j <parallel-connections>] [-s <pkt-size>] [--pps <pps>] [-d <duration>] [--delay-after-stopping-sender <delay-after-stopping-sender>] [--delay-between-allocations <delay-between-allocations>] [--calc] [-f] [--video] [--audio] [-J] [-C]
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
输出示例
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输出示例
$ 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
的UDP套接字。 - 获取套接字的外部地址
- 创建K个其他绑定到
0.0.0.0:0
的UDP套接字,并从指定的TURN服务器获取K个分配 - 将地址从"2."添加到每个TURN分配的权限
- 在每个TURN客户端实例中,将每个数据消息发送回发送者。这有效地在TURN端创建了K个UDP回声服务器实例。
- 从第一个UDP套接字,以指定的速率向所有这些"回声服务器"发送指定数量的数据包。
- 分析来自这些"回声服务器"的回复,并测量数据包丢失和往返时间。
旧版本
有一个基于旧Tokio 0.1版本的turnhammer,标记为 v0.1.0
,可以使用较旧的Rust构建,可能支持更多旧系统。它应该与rustc 1.34.2兼容。
依赖项
~5–18MB
~190K SLoC