What is the mtr command?
Mtr (my traceroute) is a command-line network diagnostic tool that provides the functions of the ping and traceroute commands. It is a simple and cross-platform tool that outputs information about the entire route that network packets take from the host system to the specified destination system. The mtr command is superior to the traceroute command because it also outputs the response percentage and response times for all network hops between the two systems.
As a network administrator, you must know how to use the mtr command and the flags that you can use to customize the output in order to perform productive network diagnostics. This article explains the use of the mtr command in detail and provides examples to show you how to use specific flags with this command.
We have run the commands and procedures described in this article on an Ubuntu 20.04 and Ubuntu 22.04 LTS system, but it should work on Debian 11 as well.
Since mtr is a command-line program, we will use it in the Ubuntu command line, the terminal. You can open the terminal application using either the System Dash or the key combination Ctrl +Alt+t.
Installing mtr Command
The mtr command is probably not installed as a default on your system. you can install it easily with apt though.
sudo apt install mtr
Usage of the mtr Command
1. View traceroute report in real-time
The mtr command is primarily used to display the traceroute report for a remote machine. All you have to do is enter the domain name or IP address of the remote system using the mtr command and the output will display the traceroute report in real-time. When you’re done viewing the report, you can exit the command with either q or the Ctrl+C key combination.
The following syntax of the mtr command displays the hostnames in the traceroute report.
$ mtr [domainName/IP]
$ mtr google.com
Display Numeric IP addresses
When you use the g flag with the mtr command, it displays the numeric IP addresses instead of the hostnames in the traceroute report.
$ mtr -g [domainName/IP]
$ mtr -g google.com
Both hostnames and numeric IP addresses
When you use the b flag with the mtr command, it displays both the numeric IP addresses and the hostnames in the traceroute report.
$ mtr -b [domainName/IP]
$ mtr -b google.com
2. Specify a limit for the number of pings
You can configure the mtr command to quit after printing the traceroute report for a specific number of pings. In the output, you can easily view the number of pings under the Snt column; when Snt reaches the number you specified in your command through the c flag, mtr will automatically exit.
$ mtr -c [n] “domainname/IP”
$ mtr -c 10 google.com
3. Enable Report Mode
Instead of printing the output of the mtr command on the screen, you can enable the report mode that will instead print the output in a text file. This way you can record the network analysis for later use and observation. All you need to do is enable the report mode through the r flag, specify a ping count for which you want to limit the report through the c flag, and also specify the report filename in which the report will be saved.
$ mtr -r -c [n] “domainname/IP” >”report-name”
$ mtr -r -c 10 google.com >mtr-report-google
The report is saved in the current user’s home folder by default. You can, however, specify a proper path for the report to be saved in.
Clear output in Report
Adding a w flag with the r flag will enable mtr to print a rather clear and more readable report for the traceroute.
$ mtr –rw -c [n] “domainname/IP” >”report-name”
mtr -rw -c 10 google.com >mtr-report-google
4. Rearrange the output fields
When you see the output of the mtr report, you will observe that the columns are arranged in a specific default manner. The o flag enables you to re-arrange the output in a customized manner to make it more useful and productive.
$ mtr -o “[Output Format]” “domainname/IP”
The mtr manpage can help you with what options you have while customizing the mtr report columns.
$ mtr -o "LSDR NBAW JMXI" google.com
5. Specify Time Interval between ICMP ECHO requests
Although the default time interval between each ICMP and ECHO request is 1 second in the mtr command, you can change it by using the i flag to specify a new time interval.
$ mtr -i [time-in-seconds] “domainName/IP”
$ mtr -i 10 google.com
6. Use TCP SYN packets or UDP datagrams
If you want to use the TCP SYN or the UDP datagrams for requesting mtr instead of the default ICMP ECHO requests, you can do so by using the tcp and udp flags respectively.
$ mtr –tcp “domainName/IP”
$ mtr –udp “domainName/IP”
$ mtr --tcp google.com
$ mtr --udp google.com
7. Specify the maximum number of hops between the local system and the remote machine
You can customize the maximum number of hops to be probed between your local system and the remote machine by specifying the time, in seconds, with the m flag. The default time limit between two hops is 30 seconds for the mtr command.
$ mtr -m [timeInSeconds] “domainName/IP”
$ mtr -m 35 220.127.116.11
8. Specify packet size
Through the s flag in the mtr command, you can specify the size, in bytes, of the IP packet for diagnosing network quality.
$ mtr –r -s [packetsize] “domainName/IP”
mtr -r -s 50 google.com
9. Print CSV Output
The CSV output of the mtr report delimits the columns with a “,”. With the csv flag, you can customize the mtr command to output the report in a CSV format.
$ mtr –csv “domainName/IP”
$ mtr --csv google.com
10. Print XML Output
The mtr command can also support the XML format for printing traceroute reports. The XML report is a good option for automated processing of the output and can be printed by specifying the xml flag with the mtr command.
$ mtr –xml “domainName/IP”
$ mtr --xml google.com
11. Accessing the mtr help and man page
Finally, you can get further options for usage and customization of the mtr command by reading its help and man page through the following commands.
$ man mtr
$ mtr --help
Here is a list of all mtr command-line options
Usage: mtr [options] hostname -F, --filename FILE read hostname(s) from a file -4 use IPv4 only -6 use IPv6 only -u, --udp use UDP instead of ICMP echo -T, --tcp use TCP instead of ICMP echo -I, --interface NAME use named network interface -a, --address ADDRESS bind the outgoing socket to ADDRESS -f, --first-ttl NUMBER set what TTL to start -m, --max-ttl NUMBER maximum number of hops -U, --max-unknown NUMBER maximum unknown host -P, --port PORT target port number for TCP, SCTP, or UDP -L, --localport LOCALPORT source port number for UDP -s, --psize PACKETSIZE set the packet size used for probing -B, --bitpattern NUMBER set bit pattern to use in payload -i, --interval SECONDS ICMP echo request interval -G, --gracetime SECONDS number of seconds to wait for responses -Q, --tos NUMBER type of service field in IP header -e, --mpls display information from ICMP extensions -Z, --timeout SECONDS seconds to keep probe sockets open -M, --mark MARK mark each sent packet -r, --report output using report mode -w, --report-wide output wide report -c, --report-cycles COUNT set the number of pings sent -j, --json output json -x, --xml output xml -C, --csv output comma separated values -l, --raw output raw format -p, --split split output -t, --curses use curses terminal interface --displaymode MODE select initial display mode -g, --gtk use GTK+ xwindow interface -n, --no-dns do not resolve host names -b, --show-ips show IP numbers and host names -o, --order FIELDS select output fields -y, --ipinfo NUMBER select IP information in output -z, --aslookup display AS number -h, --help display this help and exit -v, --version output version information and exit
After reading this article, you are better equipped with running network diagnostics between your machine and a remote system. You also have an alternative to the ping and traceroute commands, with many more customization options for better productivity and usefulness.