Screenshot on the right should pretty much say it all. Using COM objects and WMI, it gets the amount of recieved/sent bytes on your connection each second. And displays the difference.
To get a more stable output, it optionally calculate the average from the past 3, 5, 10 or 30 seconds.
Open the dialog:
/bw
; ; @name Bandwidth Meter ; @version 0.1 (2007-01-02) ; @licence GPL 2 ; @author David Lorentsen <zyberdog@quakenet.org> ; @www http://wiki.zyberdog.dk/mirc/bandwidth ; alias bw { dialog -m bw.meter bw.meter } dialog bw.meter { title "Bandwidth Meter [/bw]" size -1 -1 230 206 option pixels notheme button "&Close", 1, 156 174 65 25, ok button "&Spam", 2, 10 174 65 25 button "&Reset", 3, 83 174 65 25 box "Downstream", 4, 6 5 218 50 box "Upstream", 5, 6 60 218 50 edit "", 6, 16 24 197 20, read right edit "", 7, 16 79 197 20, read right combo 8, 16 133 197 70, drop box "Show average over", 9, 6 115 218 50 } on *:DIALOG:bw.meter:init:*:{ did -a $dname 8 Disabled did -a $dname 8 3 seconds did -a $dname 8 5 seconds did -a $dname 8 10 seconds did -a $dname 8 30 seconds did -c $dname 8 3 update .timerbw.meter 0 1 update } on *:DIALOG:bw.meter:sclick:*:{ if ($did == 2) { ; Spam var %avglen = $gettok($did(bw.meter,8),1,32) if (%avglen isnum && $numtok(%bw.meter.history.dl,32) < %avglen) { var %avglen = $v1 } if ($active ischan || $query($active)) { msg $active Bandwidth, Downstream: $did($dname,6) - Upstream: $did($dname,7) $iif(%avglen != Disabled,- ( $+ $v1 second average)) } else { echo -a * Bandwidth, Downstream: $did($dname,6) - Upstream: $did($dname,7) $iif(%avglen != Disabled,- ( $+ $v1 second average)) } } elseif ($did == 3) { ; Reset unset %bw.meter.history.* } } on *:DIALOG:bw.meter:close:*:{ .timerbw.meter off unset %bw.meter.* } alias -l update { if (!$dialog(bw.meter)) { .timerbw.meter off | unset %bw.meter.* } var %avglen = $replace($gettok($did(bw.meter,8),1,32),Disabled,1) set %bw.meter.history.dl $gettok($instok(%bw.meter.history.dl,$dl,1,32),1-30,32) set %bw.meter.history.ul $gettok($instok(%bw.meter.history.ul,$ul,1,32),1-30,32) if ($numtok(%bw.meter.history.dl,32) < %avglen) { did -ra bw.meter 6 $bytes($calc(($replace(%bw.meter.history.dl,$chr(32),+)) / $v1)).suf $+ /sec if ($did(bw.meter,8).sel > 1) { did -o bw.meter 8 $v1 $gettok($did(bw.meter,8),1-2,32) (need $calc($gettok($did(bw.meter,8),1,32) - $numtok(%bw.meter.history.dl,32)) $+ ) did -c bw.meter 8 $v1 } } else { did -ra bw.meter 6 $bytes($calc(($replace($gettok(%bw.meter.history.dl,$+(1-,%avglen),32),$chr(32),+)) / %avglen)).suf $+ /sec if ($numtok($did(bw.meter,8),32) > 2) && ($did(bw.meter,8).sel > 1) { did -o bw.meter 8 $v1 $gettok($did(bw.meter,8),1-2,32) did -c bw.meter 8 $v1 } } if ($numtok(%bw.meter.history.ul,32) < %avglen) { did -ra bw.meter 7 $bytes($calc(($replace(%bw.meter.history.ul,$chr(32),+)) / $v1)).suf $+ /sec } else { did -ra bw.meter 7 $bytes($calc(($replace($gettok(%bw.meter.history.ul,$+(1-,%avglen),32),$chr(32),+)) / %avglen)).suf $+ /sec } } alias -l dl { var %x = $wmi(BytesReceivedPersec) if (!%bw.meter.dl) { set %bw.meter.dl %x return 0 } var %r = $calc(%x - %bw.meter.dl) set %bw.meter.dl %x return %r } alias -l ul { var %x = $wmi(BytesSentPersec) if (!%bw.meter.ul) { set %bw.meter.ul %x return 0 } var %r = $calc(%x - %bw.meter.ul) set %bw.meter.ul %x return %r } alias -l wmi { .comopen com1 WbemScripting.SWbemLocator var %x = $com(com1,ConnectServer,3,dispatch* com2) var %y = $com(com2,ExecQuery,3,bstr*,SELECT $1 FROM Win32_PerfRawData_Tcpip_NetworkInterface,dispatch* com3) var %z = $comval(com3,1,$1) .comclose com1 | .comclose com2 | .comclose com3 return %z }