The internet is a vast network system full of databases, servers, routers, and other web structures. When you type a web address and hit the enter button on your web browser, it routes through your internet connection to the host address via the web. In the middle of the destination, when your packet starts the journey from the computer and reaches the destination server, it travels a lot inside the web. Many Linux, Windows, and Mac tools allow you to track every step of your internet packet. The traceroute command is one of the most used tools that you can use on Linux to track every step, live status, connection strength, latency, and many more regarding your internet packets.
Ping vs. Traceroute Command on Linux
No doubt, Ping is the most used and easy network command that displays whether the destination address is live or not. The difference between the Ping and the traceroute command is Ping only detects if the server or the address is up or not just by sending a packet and analyzing the signal.
Whereas the traceroute command can do a lot more network troubleshooting and determine the path of the network to achieve the destination address. The traceroute command can also predict the amount of time to load a webpage, detect the routers on the web address, the hostnames, the DNS server names, and many more.Â
When we run the Ping command on a network system, the command automatically sends four packets of data to the destination site; and if one of them reaches the site, then the command determines that the site is connectable, and it determines how many seconds it took to establish the connection.
Here is a command format of the Ping command for Linux:Â
ping <IP address> ping <domain name>
The traceroute command tells us more about the destination and how many milliseconds it will take to reach the site. Unlike the Ping command, the traceroute command tells us the Ip addresses of each device and calculates the round trip time of data from every router instead of measuring the only final destination. It also counts the total number of hops on the path.
Here is a command format of the traceroute command for Linux:Â
traceroute <ip_address>
Difference Between Traceroute and Mtr and Tracert on Linux
I’m sure you’ve already heard about the traceroute command, mtr command, and the tracert command for tracking the data in a networking model. In Linux and Mac, we can use the traceroute command, wherein the windows version of the traceroute command is the tracert command. Basically, the traceroute and the tracert are the same commands.
Now, we will see the difference between the traceroute command and the mtr command. The full form of the MTR is Matt’s TraceRoute, which is a modified command of the traceroute command. In traceroute, packets are tracked as they travel over an IP network to a specific host.
Example of a traceroute command:
$ traceroute 1.1.1.1 traceroute to 1.1.1.1 (1.1.1.1), 30 hops max, 60 byte packets 1 192.168.1.1 (192.168.1.1) 0.265 ms 0.248 ms 0.239 ms 2 * * * 3 X-X-X-X.X.X.pl (X.X.X.X) 21.871 ms 22.061 ms 25.072 ms (more data here) 10 one.one.one.one (1.1.1.1) 24.072 ms 22.439 ms 21.497 ms
The MTR is a single network diagnostic tool combining traceroute and ping functions. The MTR prints some of the traceroute outputs along with the Ping results.Â
Example of an MTR command:
$ mtr 1.1.1.1 -c 5 --report Start: 2019-08-09T15:13:28+0200 HOST: blackhole          Loss%  Snt  Last  Avg Best Wrst StDev   1.|-- 192.168.1.1        0.0%   5  0.2  0.1  0.1  0.2  0.0   2.|-- X-X-X-X.X.X        0.0%   5  9.7  9.0  8.4  9.7  0.5   3.|-- X-X-X-X.X.X        0.0%   5  9.6  8.6  6.2  9.8  1.5   (more data here)   10.|-- one.one.one.one      0.0%   5  12.8 13.4 10.7 18.9  3.3
How Does Traceroute Command Work on Linux?
The packet from our system to the host address travels through the router, access points, and network interfaces. To determine the actual path of your data packet, the traceroute command uses the IP header, Internet Control Message Protocol (ICMP), and the TTL or time-to-live tools on a network system.
Tracking the internet packet might be less hassle when you use a very small LAN connection on your system. When entering a wide area network, you need the traceroute command to read the data header for measuring the length, source and destination, and the protocol.
The traceroute command uses the TCP protocol to establish the connection. And the 8- bit TTL value also provides us with the TTL counter numbers that determine the total number of encounters between the data packet and the destination via the routers. The packet gets a time-out error when the TTL value is one. And the ICMP sends a message from the source to the package’s destination that ensures the time out.
Traceroute Syntaxes on Linux
Here, we will see the basic syntaxes of the traceroute command in Linux. Understanding the syntaxes will definitely help you to understand all the examples of the traceroute command that we will list below.
Here is the command format:
traceroute [options]Â host_Address [pathlength]
- -f, –first-hop=NUM: Sets the distance between the first hop and the next hop.
- -g, –gateways=GATES: In open routing, it displays a list of gateways.
- -I, –ICMP: As a probe, ICMP ECHO is specified.
- -m, –max-hop=NUM: Sets the number of hops; the default is 64.
- -M, –type=METHOD: Traceroutes are conducted with either ICMP or UDP; the default method is UDP.
- -p, –port=PORT: It defines the network port; the default is 33434.
- -q, –tries=NUM: NUM probe packets will be forwarded per hop.Â
- –resolve-hostnames: You can use this syntax to fix the hostnames.
- -t, –tos=NUM: the TOS or the type of service is defined in the NUM
- -w, –wait=NUM: Defines the waiting time in seconds.Â
- -? –help: Prints the help and manual guides for the traceroute command on Linux.Â
- –usage: It shows the usage in a brief text.Â
- -V, –version: Prints the current version of the traceroute command on Linux.
Install the Traceroute Command in Linux
The installation process of the traceroute command in Linux distributions is easy. In Windows and Mac systems, the traceroute tool comes pre-installed. In Linux, you need to install it first. Here I’ve listed installation commands for Ubuntu/Debian, RedHat, Fedora, and Arch Linux systems.Â
Install the traceroute command on Arch Linux.
sudo pacman -Sy traceroute
Get the traceroute command on Ubuntu/Debian Linux.Â
sudo apt-get install traceroute
Install the traceroute tool on Fedora and Red Hat Linux systems.
# yum install traceroute -y
After the installation finishes, you can check the traceroute version to ensure that the tool is installed successfully on your Linux machine.Â
$ traceroute --version
Examples of the Traceroute Command in Linux
We will now see some useful and practical real-life examples of the traceroute command that you should learn. The traceroute command works smoothly with all major Linux distributions on both desktop and server.
1. Run Traceroute to Get an OverviewÂ
The below-mentioned traceroute command shows us the IP address, the total number of hops in the entire path, the total duration to establish the connection, and the packers’ size.Â
traceroute ubuntupit.com
2. Hiding Device Names
If you want to hide the name of the network devices on the output of the traceroute command, please add the -n
sign on the command.Â
traceroute -n ubuntupit.com
3. Setting the Traceroute Timeout Value
Despite having a default time-out value of the traceroute command, you can manually set the time-out value on your own. The below-mentioned traceroute command shows how to set the timeout value to 7 seconds in Linux.Â
traceroute -w 7.0 ubuntupit.com
4. Setting the Number of Tests
To set the number of tests or the number of queries per hop for one execution of the traceroute command on Linux, you can use the below command.Â
traceroute -q 1 ubuntupit.com
5. Setting the Initial TTL Value
Using the -f flag syntax on the traceroute command will allow you to set the TTL value or the time-to-live tool value on Linux.Â
traceroute -f 11 ubuntupit.com
6. Store the Result in a text File
You can export the results of the traceroute command into a text file through the below-provided command on Linux.Â
traceroute google.com > results.txt
7. Trace the Route Using IPv6
If your internet connection has an IPv6 setup, you can use the below-mentioned traceroute command to trace the connection.Â
traceroute -6 ipv6.google.com
8. Trace the Route Using Ipv4
Similarly, you can also define an IPv4 connection through the below-mentioned traceroute command on Linux.Â
traceroute 4 google.comÂ
9. Specify the Interface (NIC) to Use
If your Linux system has more than one network interface card (NIC), you can assign one of your NICs to use the traceroute command with the -i flag mentioning the name of the NIC.Â
traceroute -i enp8s0 google.com
If you need to know the name of your network interface card, you can execute the ifconfig command.Â
$ ifconfig
10. Set the Response Wait Time
To change the default response wait time of the traceroute command, you can use a -w flag on the traceroute command on Linux. This little tweak would give your data pack to travel a bit more to reach the destination address.Â
traceroute -w 1 google.com
11. Disable IP Address and Hostname Mapping
To disable the IP address and hide the host mapping on Linux, please use a n sign on the traceroute command. This will allow the user not to print the host IP address and the hostname.Â
traceroute n google.comÂ
12. Set the Maximum Number of hop
By default, the average number of hops of the traceroute command is 30. You can change the hop value on the traceroute command by adding the hop value with a -m flag on the command.Â
traceroute -m 7 google.comÂ
13. Do Not Fragment the Packet
If you do not want to fragment the data pack on your Linux system, please use the -F flag on your traceroute command.Â
$ traceroute -F google.com
14. Route the Packet Through the Gate
If you want to route the traceroute command through your desired gateway, you can use the -g sign along with the command to add your gateway to the Linux command. Â
$ traceroute -g 192.168.1.6 google.com
15. Set the Destination Port to Use
By default, the traceroute command uses the network port 33434. If you need to change the network port, you can use the -p sign on the traceroute command on Linux.Â
$ traceroute -p 20292 google.com
16. Getting Help
If you need more help and manuals for the traceroute command, please execute the below-mentioned commands on the shell. The manuals will definitely help you to get started with the tool.Â
traceroute --help man tracerouteÂ
Issues You might Face in Using the Traceroute Command
While using the traceroute command in Linux, you might face some issues if you are new. Here we have enlisted a few most faced issues for the traceroute command by different users from the Linux community.
1. Issue with the -n
Flag in Traceroute Command on Linux
Earlier, we have seen that you can use an n flag with the traceroute command in Linux to hide the device name. If you face any issue while using the n flag on your shell and it gives you an invalid option, you must ensure that you have the correct traceroute tool installed on your system. You can also try executing the below-mentioned commands for alternative installation on your system.Â
Here is the sample output.Â
$ sudo traceroute -n . Not working $ traceroute: invalid option -- 'n'
Commands to get the traceroute tool fixed on a Linux machine.Â
$ update-alternatives --display traceroute $ apt-get install traceroute $ update-alternatives --configure traceroute
2. Packages Cannot Be Authenticated: Traceroute Command Issue
If the traceroute tool cannot be authenticated in your Linux system, please be sure that you are the sudo user and have the proper permission to run this command on your system. After ensuring that this tool is installed properly, you can now update your package repository with the below-mentioned sudo update command.  Â
sudo apt-get install traceroute sudo apt-get update
You can then execute your desired traceroute command, and hopefully, your issues will be solved.Â
3. Newer Versions of Traceroute Might Have Issues
In some cases, in some older devices, the latest version of the traceroute command may show some issues. For instance, if you want to run the traceroute command with the -A flag to define the path of the command, you might face an issue.Â
Sample Error Output:
~$ traceroute -A 8.8.8.8 traceroute -m 30 -q 1 -w 3 -A 8.8.8.8 traceroute: invalid option -- 'A' Try 'traceroute --help' or 'traceroute --usage' for more information.  -A   Perform AS path lookups in routing registries and print results           directly after the corresponding addresses.  Â
This issue often gets solved automatically after a repository update. If you still face this issue, please restart your device, execute the command properly, and ensure that your command does not have any typing mistakes.Â
~$ traceroute -A 8.8.8.8 traceroute to 8.8.8.8 (8.8.8.8), 30 hops max, 60 byte packets
4. Traceroute Installation Error in Linux
If you face any issue while installing the traceroute command on your Linux machine, please ensure that the path you are assigning to install is available for package installation. You must also ensure that you have the superuser privilege to install that tool. In most cases, the users keep trying to install the traceroute command inside a locked directory and get a permission denied error.Â
Could not open lock file /var/lib/dpkg/lock - open (13: Permission denied) E: Unable to lock the administration directory (/var/lib/dpkg/), are you root?
You can execute any of the below-mentioned command sets to solve this issue. Don’t forget to fix the missing repository and install the traceroute command on Linux. Â
sudo apt-get install --fix-missing  sudo apt-get update && sudo apt-get install tracerouteÂ
Get the universe repository and install the traceroute command.Â
sudo add-apt-repository universe sudo apt-get update sudo apt-get install inetutils-traceroute
5. Remove Brackets () Around IP Address on Traceroute in Linux
Sometimes you might get the output IP address inside the first bracket or in the parentheses in the terminal shell. Â
Here is a sample output:
traceroute -m2 8.8.8.8 |grep .net |awk '{print $3}' (207.225.112.2)
To remove the brackets from the output, please execute the below-mentioned command.Â
$ traceroute -m 2 8.8.8.8 | awk '/net/{gsub(/\(|\)/,"");print $3}' Â Â Â Â Â Â Or $ traceroute -m 2 8.8.8.8 | awk '/.net/{print $3}'Â |Â tr -d '()' 207.225.112.2
Final Words
Using the traceroute tool for network troubleshooting can make your task easier and more efficient. It might take a few days for the newbie users to get started with this command, but once you’re used to this tool, you’ll find how much you enjoy using it on Linux.
In the entire post, we have described a lot of things about the traceroute command in Linux. I’ve tried to illustrate the traceroute command as simply as possible. I hope this post has been useful for you; if yes, please share this post with your friends and the Linux community. You can also write down your opinions about this post in the comment section.