IRTT-SERVER(1)
๐ IRTT-SERVER(1) ๐
okay bestie, welcome to the IRTT Manual โ this is the page for irtt-server, aka the Isochronous Round-Trip Time Server. sit down, grab a boba, we're doing networking ๐งโจ
โจ NAME โจ
irtt-server โ Isochronous Round-Trip Time Server ๐ฐ๏ธ๐ซ
๐ธ SYNOPSIS ๐ธ
irtt server [args]
๐ฆ DESCRIPTION ๐ฆ
irtt server is, and I cannot stress this enough, the server for irtt(1). that's the whole vibe. it's the one that sits there and serves. main character energy fr fr ๐
๐ OPTIONS ๐
-baddresses โ bind addresses, default":2112". it's a comma separated list, and each one can be::portโ unspecified address with port. โ ๏ธ use with care, bestie, that's the wild-west optionhostโ host with the default port2112, see Host formats belowhost:portโ host with a specified port, see Host formats below%ifaceโ all addresses on interface iface with default port2112%iface:portโ all addresses on interface iface with port
Note: iface strings may contain * to match multiple interfaces โจ
-dduration โ max test duration, or0for no maximum (default0s, see Duration units below)-iinterval โ min send interval, or0for no minimum (default10ms, see Duration units below)-llength โ max packet length (default0), or0for no maximum. heads up: numbers less than the size of the required headers will cause test packets to be dropped ๐--hmac=keyโ add HMAC with key (0xfor hex) to all packets. this gives you:- dropping of all packets without a correct HMAC ๐ฎ
- protection for the server against unauthorized discovery and use ๐
--syslog=uriโ log events to syslog (default: don't use syslog). URI format isprotocol://host:port/tag. examples:local:โ log to local syslog, default tagirttlocal:/irttsrvโ log to local syslog, tagirttsrvudp://logsrv:514/irttsrvโ UDP tologsrv:514, tagirttsrvtcp://logsrv:8514/โ TCP tologsrv:8514, default tagirtt
Note: not available on Windows, Plan 9 or Google Native Client ๐ญ
--timeout=durationโ timeout for closing connections if no requests received on a connection (default1m0s, see Duration units below).0means no timeout โ and bestie, that is not recommended, especially on public servers. max client interval will be restricted totimeout/4โณ--pburst=#โ packet burst allowed before enforcing minimum interval (default5)--fill=fillโ payload fill if not requested (defaultpattern:69727474). possible values:noneโ echo client payload. insecure on public servers ๐randโ use random bytes from Go'smath.rand๐ฒpattern:XXโ use repeating pattern of hex (default69727474)
--allow-fills=fillsโ comma separated patterns of fill requests to allow (defaultrand). see options for--fill. notes:- patterns may contain
*for matching โจ - allowing non-random fills is insecure on public servers
- use
--allow-fills=""to disallow all fill requests
- patterns may contain
--tstamp=modesโ timestamp modes to allow (defaultdual). possible values:noneโ don't allow any timestampssingleโ allow a single timestamp (send, receive or midpoint)dualโ allow dual timestamps
--no-dscpโ don't allow setting dscp (defaultfalse)--set-src-ipโ set source IP address on all outgoing packets from listeners on unspecified IP addresses. use for more reliable reply routing, but ngl it increases per-packet heap allocations ๐ฌ--threadโ lock request handling goroutines to OS threads ๐งต-hโ show help ๐-vโ show version ๐ท๏ธ
๐ Host formats ๐
hosts may be either hostnames (for IPv4 or IPv6) or IP addresses. IPv6 addresses must be surrounded by brackets and may include a zone after the % character. examples, bestie:
- IPv4 IP โ
192.168.1.10 - IPv6 IP โ
[2001:db8:8f::2/32] - IPv4/6 hostname โ
localhost
Note: IPv6 addresses must be quoted in most shells ๐
โฑ๏ธ Duration units โฑ๏ธ
durations are a sequence of decimal numbers, each with optional fraction, and unit suffix, like "300ms", "1m30s" or "2.5m". and the iconic part: sanity not enforced ๐โจ
hโ hoursmโ minutessโ secondsmsโ millisecondsnsโ nanoseconds
๐ SECURITY ๐
running an IRTT server that's open to the outside world requires some additional attention, no cap. for starters, the command line flags should be used to, at a minimum:
- restrict the duration (
-d), interval (-i) and length (-l) of tests, particularly for public servers - set an HMAC key (
--hmac) for private servers to prevent unauthorized discovery and use ๐
in addition, there are various systemd(1) options available for securing services. the irtt.service file included with the distribution sets some commonly used options, but should not be considered exhaustive.
to secure a server for public use, additional steps may be taken that are outside of the scope of this documentation, including but not limited to:
- installing irtt in an unprivileged container ๐ฆ
- setting up an
iptablesfirewall (only UDP port2112must be open) ๐ฅ - setting up a chroot jail ๐ฐ
it should be noted that there are no known security vulnerabilities in the Go language at this time, and the steps above, in particular the chroot jail, may or may not serve to enhance security in any way. Go-based servers are generally regarded as safe because of Go's high-level language constructs for memory management, and at this time IRTT makes no use of Go's unsafe (https://golang.org/pkg/unsafe/) package. ๐ก๏ธ
๐ฆ EXIT STATUS ๐ฆ
irtt server exits with one of the following status codes:
0โ Success ๐1โ Runtime error ๐ญ2โ Command line error ๐คฆ3โ Two interrupt signals received ๐๐
๐ EXAMPLES ๐
$ irtt server
starts the server and listens on all addresses (unspecified address) โจ
$ irtt server -d 30s -i 20ms -l 256 --fill=rand --allow-fills=""
starts the server and listens on all addresses, setting the maximum test duration to 30 seconds, minimum interval to 20 ms, and maximum packet length to 256 bytes. disallows fill requests and forces all return packets to be filled with random data. ๐ฒ
$ irtt server -b 192.168.100.11:64381 --hmac=secret
starts the server and binds to IPv4 address 192.168.100.11, port 64381. requires a valid HMAC on all packets with the key secret, otherwise packets are dropped. ๐ฎ๐
๐ SEE ALSO ๐
irtt(1)irtt-client(1)- IRTT GitHub repository (https://github.com/heistp/irtt/) ๐
and that's the whole page bestie, you ate that ๐ฝ๏ธ๐ this was v0.9.0, dated February 11, 2018 โ yeah it's an oldie but she's still iconic, mwah ๐ซถ๐
๐ฆ where this page comes from
- fedora 43: golang-github-heistp-irtt 0.9.1-15.fc43 ยท GPL-2.0-only
- fedora 43: irtt 0.9.1-1.fc43 ยท BSD-2-Clause AND BSD-3-Clause AND GPL-2.0-only
- fedora 44: golang-github-heistp-irtt 0.9.1-16.fc44 ยท GPL-2.0-only
- fedora 44: irtt 0.9.1-1.fc44 ยท BSD-2-Clause AND BSD-3-Clause AND GPL-2.0-only
- ubuntu resolute: irtt 0.9.1-1 ยท GPL-3.0-only
- ubuntu stonking: irtt 0.9.1-1 ยท GPL-3.0-only
- ๐ girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms