Highlights
The latest release of Trippy brings both cosmetic and functional improvements to the TUI, new columns, new distribution packages, and a number of bug fixes.
The TUI has been updated to include a new information bar at the bottom of the screen which allows for the header to be shortened and simplified. The sample history chart has been enhanced to highlight missing probes and the presentation of source and target addresses has also been simplified.
As well as these cosmetic changes, the TUI has gained support for internationalization (i18n) and the ability to adjust the hop privacy setting dynamically.
This release introduces three new columns, which provide novel heuristics for measuring forward loss and backward loss, that are designed to assist users in interpreting the status of the trace.
Finally, this update includes new distribution packages for Debian and Ubuntu and addresses a number of bugs.
TUI Information Bar
The TUI now includes an information bar at the bottom of the screen, replacing the previous Config
line in the header. This change shortens the header by one line, optimizing space usage while keeping the overall vertical space of the TUI unchanged.
The main TUI screen now appears as shown below (120x40 terminal size):
The left-hand side of the information bar displays a selection of static configuration items (in order):
- The address family and tracing protocol, e.g.,
IPv4/ICMP
- The privilege level, either
privileged
orunprivileged
- The locale, e.g., English (
en
), French (fr
), etc.
The right-hand side of the information bar displays a selection of adjustable configuration items (in order):
- A toggle controlling whether
ASN
information is displayed (□ ASN
for disabled,■ ASN
for enabled) - A toggle controlling whether hop detail mode is enabled (
□ detail
for disabled,■ detail
for enabled) - A toggle controlling whether hostnames, IP addresses, or both are displayed (
host
,ip
, orboth
) - The maximum
ttl
value for hop privacy, shown as-
(privacy disabled) or a number (0, 1, 2, etc.) - The maximum number of hosts displayed per hop, shown as
-
(automatic) or a number (1, 2, etc.)
In the above screenshot, the information bar indicates the trace is using IPv4/ICMP
, is running in privileged
mode, the locale is English (en
), ASN
information is displayed, hop detail mode is disabled, hostnames are displayed, the hop privacy maximum ttl
is 2, and the maximum number of hosts per hop is set to automatic.
Note: The information bar displays only a small number of important settings. All other settings can be viewed in
the settings dialog, which can be opened by pressings
(default key binding).
The theme colors of the information bar can be customized using the info-bar-bg-color
and info-bar-text-color
theme items. Refer to the Theme Reference for more details.
Thanks to @c-git for their valuable feedback in refining the design of the information bar.
See #1349 for details.
Sample History Missing Probes
Trippy displays a history of samples for each hop as a chart at the bottom of the TUI display. Each vertical line in the chart corresponds to one sample, representing the value of the Last
column.
Previously, if a probe was lost, the sample for that round would be shown as a blank vertical line. Starting with this release, Trippy now highlights lost probes using a full vertical line in red (default theme color), making them easier to identify.
The theme color for regular samples can be configured using the existing samples-chart-color
configuration option. Additionally, the theme color for lost probes can now be customized using the new samples-chart-lost-color
configuration option. For more details, see the Theme Reference.
See #1247 for further details.
Source and Target Address Display Improvements
This release simplifies the display of the source and target addresses in the Target
line in the header of the TUI.
The Target
line has been updated such that, for both the source and destination addresses, the hostname is only shown if it differs from the IP address.
For the destination address:
- If the user supplies a target hostname, it is resolved to an IP address, and both the IP address and the provided hostname are shown.
- If the user supplies an IP address, a reverse DNS hostname lookup is attempted. If successful, both the IP address and the first resolved hostname are shown; otherwise, only the IP address is displayed.
For the source address:
- A reverse DNS hostname lookup is attempted. If successful, both the IP address and the first resolved hostname are shown; otherwise, only the IP address is displayed.
For example, when the user supplies an IP address as the tracing target, the Target
line in the header is now shown as follows:
Target: 192.168.1.21 -> 93.184.215.14 (example.com)
See #1363 for details.
Adjustable Hop Privacy Mode Settings
Trippy includes a privacy feature designed to hide sensitive information, such as IP addresses and GeoIP data, for all hops up to a configurable maximum ttl
via the tui-privacy-max-ttl
configuration option.
Previously, the privacy feature could only be toggled on or off within the TUI using the toggle-privacy
command and only if tui-privacy-max-ttl
was configured before Trippy was started.
In this release, the toggle-privacy
command has been deprecated and replaced by two new TUI commands, expand-privacy
(bound to the p
key by default) and contract-privacy
(bound to the o
key by default).
The expand-privacy
command increases the tui-privacy-max-ttl
value up to the maximum number of hops in the current trace and the contract-privacy
command decreases the tui-privacy-max-ttl
value to the minimum value, which disables privacy mode.
See #1347 for more details.
This release also repurposes the meaning of tui-privacy-max-ttl
when set to 0
. Previously, a value of 0
indicated that no hops should be hidden. Starting from this release, a value of 0
will indicate that the source of the trace, as shown in the Target
line of the header, should be hidden.
Values of 1
or greater retain their existing behavior but will now also hide the source of the trace in addition to the specified number of hops.
As a result of this change, the default value for tui-privacy-max-ttl
has been updated:
- If not explicitly set (via a command-line argument or the configuration file), nothing will be hidden by default.
- If explicitly set to
0
(the previous default), the source of the trace will be hidden.
See #1365 for details.
Preserve Screen on Exit
Trippy previously supported the --tui-preserve-screen
command-line flag, which could be used to prevent the terminal screen from being cleared when Trippy exits. This feature is useful for users who wish to review trace results after exiting the application. However, the flag had to be set before starting Trippy and could not be toggled during a trace.
This release introduces the quit-preserve-screen
TUI command (bound to the shift+q
key by default). This command allows users to quit Trippy without clearing the terminal screen, regardless of whether the --tui-preserve-screen
flag is set.
See #1382 for details.
TUI Internationalization (i18n)
The Trippy TUI has been translated into multiple languages. This includes all text displayed in the TUI across all screens and dialogs, as well as GeoIP location data shown on the world map.
The TUI will automatically detect the system locale and use the corresponding translations if available. The locale can be overridden using the --tui-locale
configuration option.
Locales can be specified for a language or a combination of language and region. For example a general locale can be created for English (en
) and specific regional locales can be created, such as United Kingdom English (en-UK
) and United States English (en-US
).
If the user's chosen full locale (language-region
) is not available, Trippy will fall back to using the locale for the language only, if it exists. For example if the user sets the locale to en-AU
, which is not currently defined in Trippy, it will fall back to the en
locale, which is defined.
If the user's chosen locale does not exist at all, Trippy will fall back to English (en
).
Locales are generally added for the language only unless there is a specific need for region-based translations.
Some caveats to be aware of:
- The configuration file, command-line options, and most error messages are not translated.
- Many common abbreviated technical terms, such as
IPv4
andASN
, are not translated.
The following example sets the TUI locale to be Chinese (zh
):
trip example.com --tui-locale zh
This can be made permanent by setting the tui-locale
value in the tui
section of the configuration file:
[tui]
tui-locale = "zh"
The following screenshot shows the TUI with the locale set to Chinese (zh
):
The list of available locales can be printed using the --print-locales
flag:
trip --print-locales
As of this release, the following locales are available:
- Chinese (
zh
) - English (
en
) - French (
fr
) - German (
de
) - Italian (
it
) - Portuguese (
pt
) - Russian (
ru
) - Spanish (
es
) - Swedish (
sv
) - Turkish (
tr
)
See #1319, #1357, #1336 and the Locale Reference for more details.
Corrections to existing translations or the addition of new translations are always welcome. See the tracking issue for the status of each translation and details on how to contribute.
Adding these translations has been a significant effort and I would like to express a huge thank you (谢谢! Merci! Danke! Grazie! Obrigado! Спасибо! Gracias! Tack! Teşekkürler!) to @0323pin, @arda-guler, @histrio, @josueBarretogit, @one, @orhun, @peshay, @ricott1, @sxyazi, @ulissesf, and @zarkdav for all of their time and effort adding and reviewing translations for this release.
Forward and Backward Packet Loss Heuristics
In line with most classic traceroute tools, Trippy displays the number of probes sent (Snd
), received (Recv
), and a loss percentage (Loss%
) for each hop. However, many routers are configured to rate-limit or even drop ICMP traffic. This can lead to false positives for packet loss, particularly for intermediate hops, as the lack of a response from such hops does not typically indicate genuine packet loss. This is a common source of confusion for users interpreting trace results.
Trippy already provides a color-coded status column (Sts
), that considers both packet loss percentage and whether the hop is the target of the trace, to try and assist users in interpreting the status of each hop. While this feature is helpful, it does not make it clear why a hop has a particular status nor help users interpret the overall status of the trace.
To further assist users, this release of Trippy introduces a pair of novel heuristics to measure forward loss and backward loss. Informally, forward loss indicates whether the loss of a probe is the cause of subsequent losses and backward loss indicates whether the loss of a probe is the result of a prior loss on the path.
More precisely:
- forward loss for probe
P
in roundR
occurs when probeP
is lost in roundR
and all subsequent probes within roundR
are also lost. - backward loss for probe
P
in roundR
occurs when probeP
is lost in roundR
and any prior probe within roundR
has forward loss.
These heuristics are encoded in three new columns:
Floss
(F
): The number of probes with forward lossBloss
(B
): The number of probes with backward lossFloss%
(D
): The percentage of probes with forward loss
These columns are hidden by default but can be enabled as needed. For more details, see the Column Reference.
The following screenshot shows an example trace with the new columns enabled:
In the following (contrived) example, after initially discovering the target (10.0.0.105
) during the first round, genuine packet loss occurs in all subsequent rounds at the third hop. This means that no probes on the common path are able to get beyond the third hop.
╭Hops───────────────────────────────────────────────────────────────╮
│# Host Loss% Snd Recv Floss Bloss Floss% │
│1 10.0.0.101 0.0% 96 96 0 0 0.0% │
│2 10.0.0.102 0.0% 96 96 0 0 0.0% │
│3 No response 100.0% 96 0 95 0 98.9% │
│4 No response 100.0% 96 0 0 95 0.0% │
│5 10.0.0.105 99.0% 96 1 0 95 0.0% │
From this we can determine that the loss at the third hop is classified as forward loss because all subsequent probes (4th and 5th) in the same round are also lost. We can also conclude that the 4th and 5th hops have backward loss starting from round two, as in those rounds a prior hop (the third hop) has forward loss.
Note the difference between the traditional Loss%
column and the new Floss%
column. The Loss%
column indicates packet loss at several hops (3rd, 4th, and 5th). In contrast, the Floss%
column helps us determine that the true packet loss most likely occurs at the 3rd hop.
It is important to stress that this technique is a heuristic, and both false positives and false negatives are possible. Some specific caveats to be aware of include:
- Every probe sent in every round is an independent trial, meaning there is no guarantee that all probes within a given round will follow the same path (or "flow"). The concept of "forward loss" and "backward loss" assumes that all probes followed a single path. This assumption is typically met (but not guaranteed) when using tracing strategies such as ICMP, UDP/Dublin, or UDP/Paris.
- Any given host on the path may drop packets for only a subset of probes sent within a round, either due to rate limiting or genuine intermittent packet loss. This could result in a false positive for "forward loss" at a given hop if all subsequent hops in the round exhibit packet loss that is not genuine. For example, in the scenario above, the hop with
ttl=3
could be incorrectly deemed to have "forward loss" if observed loss from hopsttl=4
andttl=5
is not genuine (e.g., caused by rate-limiting). - A false positive for "backward loss" could occur at a hop experiencing genuine packet loss if a previous hop on the path has "forward loss" that is not genuine. In the scenario above, if the hop with
ttl=4
has genuine packet loss, it will still be marked with "backward loss" due to the "forward loss" atttl=3
.
Despite these caveats, the addition of forward loss and backward loss heuristics aims to help users more accurately interpret trace outputs. However, these heuristics should be considered experimental and may be subject to change in future releases.
See #860 for details.
Bug Fixes
The previous release of Trippy introduced a bug (#1290) that caused reverse DNS lookups to be enqueued multiple times when the dns-ttl
expired, potentially leading to the hostname being displayed as Timeout: xxx
for a brief period.
A long standing bug (#1398) which caused the TUI sample history and frequency charts to ignore sub-millisecond samples has been fixed.
This release fixes a bug (#1287) that caused the tracer to panic when parsing certain ICMP extensions with malformed lengths.
It also resolves an issue (#1289) where the ICMP extensions mode was not being displayed in the TUI settings dialog.
A bug (#1375) that caused the cursor to not move to the bottom of the screen when exiting while preserving the screen has also been fixed.
Finally, this release fixes a bug (#1327) that caused Trippy to incorrectly reject the value ip
for the tui-address-mode
configuration option (thanks to @c-git).
New Distribution Packages
Trippy is now available in Debian 13 (trixie
) and later (with thanks to @nc7s!).
apt install trippy
See #1312 for details.
The official Trippy PPA for Ubuntu is now also available for the noble
distribution.
sudo add-apt-repository ppa:fujiapple/trippy
sudo apt update && apt install trippy
See #1308 for details.
You can find the full list of distributions in the
documentation.
Thanks
My thanks to all Trippy contributors, package maintainers, translators and community members.
Feel free to drop by the Trippy Zulip room for a chat:
Happy Tracing!
Change Log
Added
- Highlight lost probes in sample history (#1247)
- Added
quit-preserve-screen
(default:shift+q
) key binding to quit Tui without clearing the screen (#1382) - Added forward add backward loss heuristics (#860)
- Added
--tui-locale
flag to support i18n (#1319) - Added translations for locales
en
,fr
,tr
,zh
,pt
,sv
,it
,ru
,es
&de
(#506) - Added
--print-locales
flag to print all available locales (#1357) - Added Debian package (#1312)
- Added Ubuntu
noble
PPA package (#1308)
Changed
- Added information bar to Tui (#1349)
- [BREAKING CHANGE] Remove
Timestamp
from allDnsEntry
variants (#1296) - [BREAKING CHANGE] Replace
toggle-privacy
key binding withexpand-privacy
andcontract-privacy
(#1347) - [BREAKING CHANGE] Hide source address when
--tui-privacy-max-ttl
is set (#1365) - Only show hostnames if different from IPs (#1363)
- Lookup GeoIp with current locale (#1336)
- Enable Link-Time Optimization (LTO) for release builds (#1341)
Fixed
- Reverse dns enqueued multiple times when dns-ttl expires (#1290)
- Fixed panic for icmp extensions with malformed length (#1287)
- Cursor not moved to the bottom on exit when using
--tui-preserve-screen
(#1375) - Config item
tui-address-mode
does not acceptip
(#1327) - Icmp extension mode not shown in Tui settings (#1289)
- Sample history and frequency charts ignore sub-millisecond samples (#1398)
New Contributors
- @zamazan4ik made their first contribution in #1352
See CHANGELOG.md for details.
Full Changelog: 0.11.0...0.12.0