On my Linux box, traceroute does not work. The output is like this:

$ traceroute google.com

traceroute to google.com (, 30 hops max, 52 byte packets
1  * * *
2  * * *
3  * * *
4  * * *

Can anyone tell me why it's not working? Any possible reasons behind it?

4 Answers 4


By default, traceroute uses high UDP ports for tracing hosts. However, sometimes firewalls block these UDP ports.

Try to add the -I (uppercase i) parameter to the command line, eg:

traceroute -I www.google.it

This will use ICMP instead of UDP for tracing hosts.


Try to use -T (tcp) or -U (udp) to bypass firewall.
Some routers/firewall don't let icmp echo pass trough, that's why you'd use those 2 to by pass them.
Anyway, contrary as stated in wikipedia, on my debian boxes traceroute still uses icmp packets and not udp.


I was wrong...it uses udp...the icmp coming back are for an unreachable port...sorry

  • 4
    for macOS it would be -P TCP or -P UDP and -P ICMP would be the same as -I in shodanshok's answer.
    – MrG
    Jun 14, 2019 at 6:11

it could be that a firewall upstream from you is blocking the UDP packets Traceroute

On modern Unix-like operating systems, the traceroute utility by default uses UDP datagrams with destination ports numbering from 33434 to 33534.

  • I thought trace route used ICMP packets. I did not know that unix based systems use UDP. Learn something new everyday.
    – dbasnett
    Jun 21, 2010 at 12:32

This is probably because icmp TIME_EXCEEDED answer is filtered by the router/firewall that you use as default gateway or by your Linux system itself