tcping.exe - ping over a tcp connection
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.)
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 188.8.131.52:80/tcp - Port is open - time=23.285ms Probing 184.108.40.206:80/tcp - Port is open - time=21.651ms Probing 220.127.116.11:80/tcp - Port is open - time=21.899ms Probing 18.104.22.168:80/tcp - Port is open - time=21.789ms Ping statistics for 22.214.171.124: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 126.96.36.199:80/tcp - HTTP is open - time=31.288ms rcv_time=31.951 status=200 bytes=4052 kbit/s=~1014.554 Probing 188.8.131.52:80/tcp - HTTP is open - time=29.553ms rcv_time=30.947 status=200 bytes=4052 kbit/s=~1047.479 Probing 184.108.40.206:80/tcp - HTTP is open - time=29.871ms rcv_time=31.727 status=200 bytes=4052 kbit/s=~1021.728 Probing 220.127.116.11:80/tcp - HTTP is open - time=29.976ms rcv_time=36.002 status=200 bytes=4052 kbit/s=~900.393 Ping statistics for 18.104.22.168: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):
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.
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