home | help
TCPTRACEROUTE(1)	     General Commands Manual		TCPTRACEROUTE(1)

NAME
     tcptraceroute - A traceroute implementation using TCP packets

SYNOPSIS
     tcptraceroute [-nNFSAE] [ -i interface ] [ -f first ttl ]
     [ -l length ] [ -q number of queries ] [ -t tos ]
     [ -m max ttl ] [ -p source port ] [ -s source address ]
     [ -w wait time ] host [ destination port ] [ length ]

DESCRIPTION
     tcptraceroute is a traceroute implementation using TCP packets.

     The  more traditional traceroute(8) sends out either UDP or ICMP ECHO pack-
     ets with a TTL of one, and increments the TTL  until  the	destination  has
     been  reached.   By  printing the gateways that generate ICMP time exceeded
     messages along the way, it is able to determine the path packets are taking
     to reach the destination.

     The problem is that with the widespread use of firewalls on the modern  In-
     ternet,  many of the packets that traceroute(8) sends out end up being fil-
     tered, making it impossible to completely trace the path  to  the	destina-
     tion.   However,  in  many  cases,  these firewalls will permit inbound TCP
     packets to specific ports that hosts sitting behind the firewall  are  lis-
     tening  for  connections on.  By sending out TCP SYN packets instead of UDP
     or ICMP ECHO packets, tcptraceroute is able to bypass the most common fire-
     wall filters.

     It is worth noting that tcptraceroute never completely  establishes  a  TCP
     connection with the destination host.  If the host is not listening for in-
     coming connections, it will respond with an RST indicating that the port is
     closed.   If the host instead responds with a SYN|ACK, the port is known to
     be open, and an RST is sent by the kernel tcptraceroute is  running  on  to
     tear  down  the connection without completing three-way handshake.  This is
     the same half-open scanning technique that nmap(1) uses when passed the -sS
     flag.

OPTIONS
     -n     Display numeric output, rather than doing a reverse DNS  lookup  for
	    each  hop.	 By  default,  reverse	lookups  are  never attempted on
	    RFC1918 address space, regardless of the -n flag.

     -N     Perform a reverse DNS lookup for each  hop,  including  RFC1918  ad-
	    dresses.

     -f     Set  the initial TTL used in the first outgoing packet.  The default
	    is 1.

     -m     Set the maximum TTL used in outgoing packets.  The default is 30.

     -p     Use the specified local TCP port in outgoing packets.   The  default
	    is to obtain a free port from the kernel using bind(2).  Unlike with
	    traditional  traceroute(8),  this number will not increase with each
	    hop.

     -s     Set the source address for outgoing packets.  See also the -i flag.

     -i     Use the specified interface for outgoing packets.

     -q     Set the number of probes to be sent to each hop.  The default is 3.

     -w     Set the timeout, in seconds, to wait for a response for each  probe.
	    The default is 3.

     -S     Set  the  TCP SYN flag in outgoing packets.  This is the default, if
	    neither -S or -A is specified.

     -A     Set the TCP ACK flag in outgoing packets.  By doing so, it is possi-
	    ble to trace through stateless firewalls which permit  outgoing  TCP
	    connections.

     -E     Send ECN SYN packets, as described in RFC2481.

     -t     Set  the  IP  TOS  (type of service) to be used in outgoing packets.
	    The default is not to set any TOS.

     -F     Set the IP "don't fragment" bit in outgoing packets.

     -l     Set the total packet length to be used in outgoing packets.  If  the
	    length  is	greater  than  the minimum size required to assemble the
	    necessary probe packet headers,  this  value  is  automatically  in-
	    creased.

     -d     Enable debugging, which may or may not be useful.

     --dnat
	    Enable  DNAT  detection,  and display messages when DNAT transitions
	    are observed.  DNAT detection is based on the fact that some NAT de-
	    vices, such as some Linux 2.4 kernels, do not correctly rewrite  the
	    IP	address  of the IP packets quoted in ICMP time-exceeded messages
	    tcptraceroute solicits, revealing the destination IP address an out-
	    bound probe packet	was  NATed  to.   NAT  devices	which  correctly
	    rewrite  the  IP address quoted by ICMP messages, such as some Linux
	    2.6 kernels, will not be detected.	For some target hosts, it may be
	    necessary to use --dnat in conjunction with --track-port.	See  the
	    examples.txt file for examples.

     --no-dnat
	    Enable DNAT detection for the purposes of correctly identifying ICMP
	    time-exceeded  messages  that  match up with outbound probe packets,
	    but do not display messages when  a  DNAT  transition  is  observed.
	    This is the default behavior.

     --no-dnat-strict
	    Do	not  perform  any DNAT detection whatsoever.  No attempt will be
	    made match up ICMP time-exceeded messages with outbound probe  pack-
	    ets,  and  when  tracerouting  through  a  NAT device which does not
	    rewrite the IP addresses of the IP packets quoted in  ICMP	time-ex-
	    ceeded messages, some hops along the path may appear to be unrespon-
	    sive.   This  option  should  not  be needed in the vast majority of
	    cases, but may be utilized if it is suspected that the  DNAT  detec-
	    tion code is misidentifying ICMP time-exceeded messages.

EXAMPLES
     Please see the examples.txt file included in the tcptraceroute distribution
     for a few real world examples.

     To trace the path to a web server listening for connections on port 80:

	    tcptraceroute webserver

     To trace the path to a mail server listening for connections on port 25:

	    tcptraceroute mailserver 25

BUGS
     No  error	checking  is performed on the source address specified by the -s
     flag, and it is therefore possible for tcptraceroute to send  out	TCP  SYN
     packets for which it has no chance of seeing a response to.

AUTHOR
     Michael C. Toren <mct@toren.net>

AVAILABILITY
     For updates, please see:
	    http://michael.toren.net/code/tcptraceroute/

SEE ALSO
     traceroute(8), ping(8), nmap(1)

				  2006 March 28 		TCPTRACEROUTE(1)

home | help