Eli Fulkerson .com
HomeProjectsTcping
 
 


tcping.exe - ping over a tcp connection

Description:

tcping.exe is a small console application that operates similarly to 'ping', however it works over a tcp port. Not a terribly interesting concept, but I had trouble finding a windows utility to do this that I was happy with. There are now several different implementions of this floating around, written independently by different people. There are many like it, but this one is mine.

Update: tcping now also speaks http. If the '-h' flag is used, tcping will connect and attempt to download the given url over http in addition to opening the port. (Note: doesn't parse www.example.org:8080/document.html format. Use "tcping -h www.example.org/document.html 8080" instead.)

I have a tcp traceroute now too. (May 2014)

Download Here

Language:

  • C++ - Makefile included for Visual Studio
  • License:

  • The code for this program is available under the GPL.
  • This utility includes public domain code from The Winsock Programmer's FAQ, which you may also be interested in.
  • Usage:

    NAME
    	tcping - simulate "ping" over tcp by establishing a connection to network hosts.
    	Measures the time for your system to [SYN], receive the target's [SYN][ACK] and send [ACK].  Note that the travel time for
    	the last ACK is not included - only the time it takes to be put on the wire a tthe sending end.
    
    SYNOPSIS
    	tcping [-tdsvf46] [-i interval] [-n times] [-w interval] [-b n] [-r times][-j depth] [--tee filename] [-f] destination [port]
    
    DESCRIPTION
    	tcping measures the time it takes to perform a TCP 3-way handshake (SYN, SYN/ACK, ACK) between itself and a remote host.
    	The travel time of the outgoing final ACK is not included, only the (minimal) amount of time it has taken to drop it on
    	the wire at the near end.  This allows the travel time of the (SYN, SYN/ACK) to approximate the travel time of the
    	ICMP (request, response) equivalent.
    	
    OPTIONS
    	-4		Prefer using IPv4
    
    	-6		Prefer using IPv6
    
    	-t		ping continuously until stopped via control-c
    
    	-n count
    			send _count_ pings and then stop.  Default 4.
    	-i interval
    			Wait _interval_ seconds between pings.  Default 1.  Decimals permitted.
    	-w interval
    			Wait _interval_ seconds for a response.  Default 2.  Decimals permitted.
    
    	-d 		include date and time on every output line
    	
    	-f		Force sending at least one byte in addition to making the connection.
    	
    	-b type
    			Enable audible beeps.
    			'-b 1' will beep "on down".  If a host was up, but now its not, beep.
    			'-b 2' will beep "on up".  If a host was down, but now its up, beep.
    			'-b 3' will beep "on change".  If a host was one way, but now its the other, beep.
    			'-b 4' will beep "always".
    	-r count
    			Every _count_ pings, we will perform a new DNS lookup for the host in case it changed.
    
    	-s		Exit immediately upon a success.		
    
    	-v		Print version and exit.
    
    	-j depth
    			Calculate jitter.  Jitter is defined as the difference between the last response time and the historical average.
    			If _depth_ is specified tcping will use the prior _depth_ values to calculate a rolling average.  If _depth_ is not
    			specified tcping will use the overall average.
    
    	--tee _filename_
    			Duplicate output to the _filename_ specified.  Windows can still not be depended upon to have a useful command line 
    			environment. Don't tease me, *nix guys.
    			
    	destination
    			A DNS name, an IP address, or (in "http" mode) a URL.
    			Do not specify the protocol ("http://") in "http" mode.  Also do not specify server port via ":port" syntax.
    			For instance:   "tcping http://www.elifulkerson.com:8080/index.html" would fail
    			Use the style:  "tcping www.elifulkerson.com/index.html 8080" instead.
    								
    	port
    			A numeric TCP port, 1-65535.  If not specified, defaults to 80.
    			
    HTTP MODE OPTIONS	
    	-h		Use "http" mode.  In http mode we will attempt to GET the specified document and return additional values including
    			the document's size, http response code, kbit/s.
    	-u		In "http" mode, include the target URL on each output line.
    	
    	--post	Use POST instead of GET in http mode.
    	--head	Use HEAD instead of GET in http mode.
    	--get	Shorthand to invoke "http" mode for consistency's sake.
    
    	--proxy _proxyserver_
    			Connect to _proxyserver_ to request the url rather than the server indicated in the url itself.
    	--proxyport _port_
    			Specify the numeric TCP port of the proxy server.  Defaults to 3128.
    
    RETURN VALUE
    	tcping returns 0 if all pings are successful, 1 if zero pings are successful and 2 for mixed outcome.
    
    BUGS/REQUESTS
    	Please report bugs and feature requests to the author via contact information on http://www.elifulkerson.com
    	
    AVAILABILITY
    	tcping is available at http://www.elifulkerson.com/projects/tcping.php
    
    
    
    D:\tcping-devel>tcping www.reddit.com
    
    Probing 72.14.204.104:80/tcp - Port is open - time=23.285ms
    Probing 72.14.204.104:80/tcp - Port is open - time=21.651ms
    Probing 72.14.204.104:80/tcp - Port is open - time=21.899ms
    Probing 72.14.204.104:80/tcp - Port is open - time=21.789ms
    
    Ping statistics for 72.14.204.104:80
         4 probes sent.
         4 successful, 0 failed.
    Approximate trip times in milli-seconds:
         Minimum = 21.651ms, Maximum = 23.285ms, Average = 22.156ms
    

    D:\tcping-devel>tcping -h www.elifulkerson.com
    ** Requesting "" from www.elifulkerson.com:
    (for various reasons, kbit/s is an approximation)
    
    Probing 64.22.103.201:80/tcp - HTTP is open - time=31.288ms rcv_time=31.951 status=200 bytes=4052 kbit/s=~1014.554
    Probing 64.22.103.201:80/tcp - HTTP is open - time=29.553ms rcv_time=30.947 status=200 bytes=4052 kbit/s=~1047.479
    Probing 64.22.103.201:80/tcp - HTTP is open - time=29.871ms rcv_time=31.727 status=200 bytes=4052 kbit/s=~1021.728
    Probing 64.22.103.201:80/tcp - HTTP is open - time=29.976ms rcv_time=36.002 status=200 bytes=4052 kbit/s=~900.393
    
    Ping statistics for 64.22.103.201:80
         4 probes sent.
         4 successful, 0 failed.
    Approximate trip times in milli-seconds:
         Minimum = 29.553ms, Maximum = 31.288ms, Average = 30.172ms
    
    

    Download Current Version (0.23):

    tcping.exe, win32 console application
    tcping64.exe, compiled for 64 bit
    tcping.exe, win32 console application, zipped
    source + Makefile for tcping.exe, zipped.

    Update: Feb 28 2007. Have added '-t' and '-n <count>' command line options by request.

    Update: Jun 22 2009. Have added '-i', '-d', '-b' command line options by request.

    Update: Aug 16 2009. Now using QueryPerformanceCounter instead of ftime for timing.

    Update: Oct 14 2009. Returning 0 for success, 1 for failure, and 2 for mixed success and failure.

    Update: Aug 10 2010. Added -w option, for maximum time to wait before timing out a connection.

    Update: Aug 18 2010. Added statistics output after control-c termination by request.

    Update: Mar 10 2011. Fix for failed connections not being closed.

    Update: Mar 15 2011. Have added '-r x' to cause a new DNS lookup every x attempts.

    Update: Mar 17 2011. Removed the "cerr" vs "cout" distinction, ctrl-c is now more responsive.

    Update: Apr 29 2011. -s option contributed by Michael Bray. Credits moved to the -v output to be less cluttered.

    Update: Jul 7 2011. '-b 3' should work now in situations where it was down to start with. Oops. Thanks to Joe Hubele.

    Update: Dec 13 2011. Added '-o', '-f'. Merged in '-d', '-h' and 'u' from httping. Added '-p'.

    Update: Jul 20 2012. Changed '-i' to allow floats (for instance, delay 0.1 seconds between pings). Added min/max/avg download time to summary statistics when using http mode.

    Update: Apr 14 2013. Removed inaccurate timing function and '-o' which let you chose it.. Removed '-p' in favor of '--head' and '--post' to specify HTTP commands. Added '--tee filename' to output to a file in addition to the console. Added '-j' to display jitter (currently calculated as difference between last ping and historical average). Fixed a crash bug if incorrect command line arguments were specified.

    Update: Apr 15 2013. Changed average behavior to only count successful connections. '-j' now has an optional argument to specify the depth of a rolling average for jitter calculations. For instance, '-j 10' will use up to the 10 previous ping results, non-inclusive with the current result. Rolling average is disabled if no depth is specified - in that case it will use the total average of the entire sesion. Corrected output buffer flushing error introduced in 0.15.

    Update: Apr 20 2013. IPv6 and http proxy support. Added '-4', '-6', '--proxy-server', '--proxy-port'. '-w' is now specified in seconds rather than milliseconds for consistency with other arguments.

    Update: May 29 2013. Speed optimizations

    Update: Jul 10 2013. Fixed broken command line handling for certain --proxy arguments.

    Update: Aug 26 2013. CPU use fix - in cases where it takes a long time to get a response, we back off and stop grinding the cpu in the interest of precision.

    Update: Jan 20 2014. Fixed some resource leaks.

    Update: Mar 17 2014. Added -c to only output lines if there is a state change.

    Update: Apr 2 2014. Rephrased 'no error' to be less confusing.

    Old versions:

    v0.22 tcping.exe tcping.zip tcping-src.zip
    v0.21 tcping.exe tcping.zip tcping-src.zip
    v0.20 tcping.exe tcping.zip tcping-src.zip
    v0.19 tcping.exe tcping.zip tcping-src.zip
    v0.18 tcping.exe tcping.zip tcping-src.zip
    v0.17 tcping.exe tcping.zip tcping-src.zip
    v0.16 tcping.exe tcping.zip tcping-src.zip
    v0.15 tcping.exe tcping.zip tcping-src.zip
    v0.14 tcping.exe tcping.zip tcping-src.zip
    v0.13 tcping.exe tcping.zip tcping-src.zip
    v0.12 tcping.exe tcping.zip tcping-src.zip
    v0.11 tcping.exe tcping.zip tcping-src.zip
    v0.10 tcping.exe tcping.zip tcping-src.zip
    v0.9 tcping.exe tcping.zip tcping-src.zip
    v0.8 tcping.exe tcping.zip tcping-src.zip
    v0.7 tcping.exe tcping.zip tcping-src.zip
    v0.6 tcping.exe tcping.zip tcping-src.zip
    v0.5 tcping.exe tcping.zip tcping-src.zip
    v0.4 tcping.exe tcping.zip tcping-src.zip
    v0.3 tcping.exe tcping.zip tcping-src.zip
    v0.2 tcping.exe tcping.zip tcping-src.zip
    v0.1 tcping.exe tcping.zip tcping-src.zip

    See also:

    tcproute.exe