83 lines
2.0 KiB
Bash
83 lines
2.0 KiB
Bash
#! /bin/bash
|
|
|
|
# script to measure the speed of netcat.
|
|
# start with one argument for usage information
|
|
#
|
|
# Tools that are used by this script are:
|
|
# nc, bc, wc, sed, awk
|
|
#
|
|
# Author: Karsten Priegnitz (koem@petoria.de)
|
|
|
|
NCPORT=23457
|
|
WAIT=1
|
|
|
|
# determine the programme's name
|
|
me=`echo $0 | sed 's+.*/++'`
|
|
|
|
# check number of arguments provided
|
|
if [ $# -ne 0 -a $# -ne 2 ]; then
|
|
echo "Usage:"
|
|
echo
|
|
echo " On the transmitter side:"
|
|
echo " $me <receivers ip-address> <amount of data>"
|
|
echo
|
|
echo " The <amount of data> is to be given in byte but you"
|
|
echo " also can supply M or K for MegaByte and KiloByte."
|
|
echo " Example: $me 10.1.1.3 20M"
|
|
echo
|
|
echo " On the receiver side:"
|
|
echo " $me"
|
|
echo
|
|
echo " Start $me on the receiver side before starting it"
|
|
echo " on the transmitter side. Stop the receiver by pressing"
|
|
echo " and holding Ctrl-C."
|
|
exit 1
|
|
fi
|
|
|
|
# are we the receiver?
|
|
if [ $# -eq 0 ]; then
|
|
# yes, we are
|
|
while true; do
|
|
echo "waiting to receive data... (quit: press and hold Ctrl-C)"
|
|
|
|
# wait for data and count bytes
|
|
AMOUNT=`nc -v -w 120 -l -p $NCPORT | wc -c | awk '{print $1}'`
|
|
|
|
# display amount of data received
|
|
echo $AMOUNT byte of data received
|
|
echo
|
|
|
|
# sleep, so that the loop can be
|
|
# interrupted by pressing Ctrl-C
|
|
sleep 1
|
|
done
|
|
fi
|
|
|
|
# we are the sender
|
|
echo "sending data..."
|
|
|
|
# calculate the amount of data to be sent
|
|
AMOUNT=`echo $2|sed s/[mM]/\*1048576/g | sed s/[kK]/\*1024/g | bc`
|
|
|
|
# send data and measure the time spent
|
|
TEMP=/tmp/$me.tx
|
|
( time -p dd if=/dev/zero bs=$AMOUNT count=1 2>/dev/null | nc -v -w $WAIT $1 $NCPORT ) 2>"$TEMP" || cat "$TEMP"
|
|
|
|
# read the time needed
|
|
REAL=`grep "^real" "$TEMP" | awk '{print $2}'`
|
|
rm "$TEMP"
|
|
# subtract the wait times
|
|
DOUBLEWAIT=$(($WAIT * 2))
|
|
NEEDED=`echo $REAL - $DOUBLEWAIT|bc`
|
|
|
|
# calculate and print speed
|
|
BPS=`echo "scale=3;$AMOUNT / $NEEDED"|bc`
|
|
KBPS=`echo "scale=3;$AMOUNT / $NEEDED / 1024"|bc`
|
|
MBPS=`echo "scale=3;$AMOUNT / $NEEDED / 1048576"|bc`
|
|
|
|
echo "time needed: ${NEEDED}s"
|
|
echo "byte per second: $BPS"
|
|
echo "KByte per second: $KBPS"
|
|
echo "MByte per second: $MBPS"
|
|
|