Beefy Boxes and Bandwidth Generously Provided by pair Networks
go ahead... be a heretic

Re: Re: Bandwidth Testing

by sunadmn (Curate)
on Aug 26, 2003 at 20:18 UTC ( #286848=note: print w/replies, xml ) Need Help??

in reply to Re: Bandwidth Testing
in thread Bandwidth Testing

You are dead on there I just want a html web page I can direct users to in my dfferent cable markets and they can test the speed of their modem, currently we do use FTp, but I was asked to find something pretty with graphs like other MSO's use. It seems that most use a Java applet, which I know nothing about so i was thinking perl.

Replies are listed 'Best First'.
Re: Re: Re: Bandwidth Testing
by Preceptor (Deacon) on Aug 26, 2003 at 20:34 UTC
    In which case, I'd suggest trying something like a cgi that does:
    (No code I'm afraid, I don't have my real computer to experiment with)
    • Takes a time stamp (maybe using Time::HiRes)
    • Prints a load of data to the browser in comments (note, make sure that 'autoflush' is on)
    • Takes another timestamp and compares the two. Given your known quantity of data transmitted you should be able to figure out bandwidth.
    I'm not 100% certain that a CGI will pause if a buffer overflows. If it doesn't, then what you'd need to do is something smart with multipart mime, to refresh to another CGI.
    The trick I picked up from bigbrother ( is to print multipart mime pages, and then you can stick a refresh header in it at the bottom. So you have your 'big' page, that prints out, hits the refresh 0 and then redirects to your 'finished' page. That compares the timestamps, and prints an output.
    I have an example, but not handy. If someone doesn't beat me to it, I'll try and remember to post it tomorrow.
Re: Re: Re: Bandwidth Testing
by Preceptor (Deacon) on Aug 27, 2003 at 08:18 UTC
    OK, here's an example that seems to work. Not very pretty, I know :)
    Accuracy of this test will increase with larger data sizes, since then you're reducing the percentage overhead introduced by server load, general cgi speed etc.
    Seems to work with my quick testing, but YMMV.

    (Oh and I had to retype this a couple of times, since the textbox likes to clear whenever I hit 'ESC'. Damn those 'vi' fingers)
    #!/bin/perl use warnings; use strict; use Time::HiRes qw ( gettimeofday ) ; my $data = "E"x1020; #start with using 1k blocks shall we? my %cgi_vars; foreach my $pair ( split ( "&", $ENV{'QUERY_STRING'} ) ) { my ( $var, $val ) = split ("=", $pair); $cgi_vars{$var} = $val; } #cgi headers: print "content-type: text/html\n\n"; #take time my ( $start_seconds, $start_microseconds ) = gettimeofday; print "$start_seconds $start_microseconds<BR/>\n"; #print stuff to thingy if ( $cgi_vars{"data_size"} ) { for ( my $count=0; $count < $cgi_vars{"data_size"}; $count++ ) { print "<!",$data,"->\n"; } } #take time. my ( $end_seconds, $end_microseconds ) = gettimeofday; print "$end_seconds $end_microseconds<BR/>\n"; #compare. my $time_delta = ($end_seconds - $start_seconds) + ( ( $end_microsecon +ds - $start_microseconds) / 1000000); if ( $cgi_vars{"data_size"} ) { print "your data transfer of ", $cgi_vars{"data_size"}, "k took ", $ +time_delta, " seconds<BR/>\n"; print "your bandwidth is ",$cgi_vars{"data_size"} / $time_delta ," k +ilobytes/sec<BR/>\n"; } else { print "please invoke as $ENV{'SCRIPT_NAME'}?data_size=100<BR/> \n"; }
      Thanks so much you're a life saver I will test thisout today and let you know how things go.
      Quick question for you did you have to do anything special to get this to run correctly?? I am getting a print out that says "please invoke as /cgi-bin/speed_test.cgi?data_size=100 . Does this mean anything to you?? Here is my basic HTML for testing:
      <form name="form1" method="get" action="/cgi-bin/speed_test.cgi"> <input type="submit" name="Submit" value="Start"> </form>
        It means that you need a field in the cgi for 'data_size'.
        I'd suggest adding (iirc):
        <INPUT TYPE="HIDDEN" NAME="data_size" VALUE=100>
        in your form (could be wrong there).
        Basically, you're looking for a URL that looks something like:
        You could always hardcode the data size though, depending on what suits you.

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://286848]
and all is quiet...

How do I use this? | Other CB clients
Other Users?
Others perusing the Monastery: (6)
As of 2017-06-27 12:38 GMT
Find Nodes?
    Voting Booth?
    How many monitors do you use while coding?

    Results (605 votes). Check out past polls.