It is designed based on a technical report (CUCS-009-99) and a GlobeComm paper I wrote on asymmetric bandwidth measurement. They are mentioned in my home page .
Syntax: ./hop_speed.SunOS2.6 ipaddr ttl #iters (default | len1 [len2 ... ])
Note: this binary built for Solaris 2.6 could be an older version,
so -v may not work, and you need to use IP address instead of
hostname. The ttl value is the number of hops required to reach the
destination host using traceroute.
The Windows version has a similar syntax, but it is simpler and only measures one ttl.
Syntax: ./hop_speed.FreeBSD [-v] [-d] [-i #iters] [-o timeout] [-s len1,len2...] -t ttl ipaddr
Note: the FreeBSD version is a newer binary. -v prints round-trip
times (RTT) for all ICMP and UDP test packets. -d instructs the program to
invoke tcpdump to capture incoming ICMP/UDP packets, you need to set
environment variable TCPDUMP to point to the tcpdump binary. The
receiving timestamp is slightly smaller using tcpdump, because it uses
a lower-layer interface, but I haven't used this option for a long
time. -o specifies the time in floating point seconds, to wait, in
case ICMP port unreachable is not generated quickly.
Solaris 2.8 binary version should have the same syntax as FreeBSD one.
Output: The program's most important output is the measured bandwidth, with an estimate of error/noise, but the error estimate is not very precise in practice, and can only you a hint on how precise the result is. If you use an older version like Windows one, it will only do one TTL. So it will print out a value like "m" or "k", which is the slope of the RTT vs. Packet size curve, measured in sec/byte. Using the algorithm I described in my GlobeComm paper, you should be able to calculate the bandwidth link speeds. But I agree the process is tedious.
Download hop_speed: (binaries)