You are here: Duckware » FastPing
FastPing - network speedtest tool
(test Mbps speed to/from a device with NO software on the test device)


Download/Extract/Run: Download fastping.zip, extract the contents into a temp folder, and run the included fastping.exe program.

Requirements: FastPing requires Windows and 32-bit Java installed in order to work.

FastPing: FastPing is a network speedtest tool, utilizing ICMP pings sent at a rate you specify. When a large-sized ping is sent at a fast rate to a device being tested, this allows you to measure the Mbps network speed (and reliability) to that device without installing any software on the device. Great for testing connectivity to lower end IoT devices (like Wi-Fi cams, etc).
Duckware (R) Fast ping utility (TM) Version 2.5c
Copyright (c) 2014-2024 Duckware. All rights reserved.

Usage: fastping [-n:count] [-l:size] [-ms:ms] [-w:ms] [-i:ttl] [-beep] HOST*

    HOST: name/ipaddress (multiple allowed; pings are then interleaved)

  Options:
    -n:count  number of ICMP echo requests to send (default:10)
    -l:size   send buffer size (default:62500)
    -ms:ms    ms delay between pings (default:0=wait for prior ping)
    -w:ms     ms timeout to wait for ping reply (default:1000)
    -i:ttl    time to live (default:64)
    -beep     output bell character on ping failures (rate limited to 1/sec)

  Output is TSV list of ping replies in RECEIVED (maybe out of) order:
    nSeq   sent sequence number (order ping was sent)
    nHost  which host ping was sent to
    tSent  time offset when ping was sent
    ms     ms ping reply time (or * for timeout/lost)
    Mbps   calculated Mbps (not including networking overhead)
    info   optional informational message
Internet Upload speed: Use a large ping size with TTL of your first Internet hop to obtain an estimate of your Internet connection upload speed:
fastping.exe -n:10 -l:65000 -ms:0 -i:2 duckware.com
Some routers don't like pings sent too fast -- in that case change the ms time from '0' to '1000':
fastping.exe -n:10 -l:65000 -ms:1000 -i:2 duckware.com
A warning: Some cable modems support 'upload bursting', so this test will measure that (faster) speed (next section).

Cable Modem Upload bursting: Often times modems allow a small amount of data to be uploaded at a bitrate much faster than the maximum sustained bitrate (a 12 Mbps upload connection may allow bursting up to 40 Mbps). Details. An easy way to see this 'fast burst' and then 'back off' is to upload a bunch of data at ever increasing speeds. Run this command, altering "100" to faster speeds (90,80,...10):
fastping -n:30 -l:65000 -ms:100 -i:2 duckware.com
Most modems work fine with a large "65000" byte ping (but some may not). Also, use caution using the results from this test because I have seen some modems treat ICMP differently than other traffic (like UDP).

Network stress test / reliability: Send out a ton of small pings every 2 milliseconds. On Ethernet, the expectation is no lost packets. On great Wi-Fi, there will be no lost packets. But, in general, expect Wi-Fi to have some packet loss from this stress test.
fastping -n:100000 -l:1400 -ms:2 192.168.1.1
Test Wi-Fi Camera connectivity: Send large pings to the IP address of your Wi-Fi cam to check combined average for both upload and download Mbps speed:
fastping -n:10 -l:62500 -ms:0 192.168.1.250
Is 'slow Wi-Fi' to a device due to poor Wi-Fi (or the device)? You 'fastping' (with large ping sizes) a device and sometimes notice significant slowdowns. Is that caused by poor Wi-Fi, or caused by the device itself? One way to find out is to ping TWO devices interleaved (at the same time). If they both 'have trouble', then poor Wi-Fi is likely to blame. But if one device pings fast, and the second device pings slow, the problem is not Wi-Fi.
fastping -n:10 -l:62500 -ms:0 192.168.1.250 192.168.1.103
Reduce ping size if all pings fail: If all pings are failing, the device you are testing likely does not like the 'large' ping sizes. Use the -l:size command line option to select a smaller size. Start at a very small size (like 1000) and ramp until you reach a failure point (and then back off a little from that).
fastping -l:1000 192.168.1.1
But a warning: As you decrease the ping size, the relative size of the unmeasured 'network overhead' increases, making the resulting Mbps speed measured less accurate.

Slow down the pings if only some 'later' pings fail: If some 'later' pings are failing (first pings work), the device you are testing may not like the fast rate of pings. Slow down the rate of pings. Instead of 'back-to-back' (with -ms:0), slow down the pings using -ms:250 (or even larger/slower).
fastping -ms:250 192.168.1.1
Why the ping size default is 62500: To also allow 'mental math' to quickly determine the resulting Mbps. All of the math simplifies down to dividing ms reponse time into 1000 to obtain Mbps. For example, a large 62500 ping to a host that also responds (with a ping reply) in 10ms is 100 Mbps (1000/10=100). Here is the full math:
Mbps = (62500+62500)×8/1000000/(MS/1000) = 1000/MS
Also, a size of 62500 is large enough to make the unmeasured 'network overhead' relatively small, making the calculated Mbps very close (a slight underestimate) of actual Mbps. This works great for Wi-Fi devices (on 'slower' links). It is NOT designed to accurately measure Gigabit speeds.

Large pings ARE fragmented (and therefore, a great network stress test): Large pings are designed to stress test your networking environment. A large ping must be split into many IP fragments and each fragment send individually, which are then recombined at the other end into a single ping request (and the same thing happens to the ping reply). If even a single fragment is lost (either way), the entire ping will fail. This makes large pings a great network stress and reliability test.
Each large 62500 byte ping is actually sent as 43 IP fragments (over Ethernet with 1500 MTU).
Maximum size: The realistic maximum size for a ping is often 65,507 bytes, as that results a packet with 65,535 bytes -- 8 (ICMP header) + 20 (IP header) + 65507 (ping data) = 65535.

Windows large ping: To test the 'large ping' concept using the ping program built into Windows:
ping -n 10 -l 62500 <ip-address>
Linux large ping: To test the 'large ping' concept using the ping program built into Linux:
ping -c 10 -s 62500 <ip-address>
MacOS large ping: MacOS limits ping size to MTU size, so MacOS does not support large pings.

Donate: If you find this program helpful, please support it with a donation.
This document is Copyright © 2020-2024 Jerry Jongerius