sexta-feira, 9 de março de 2012

Exibindo os bytes de download e upload a cada 1 segundo

  Considero extremamente importante saber como anda o tráfego de informações que passa pelo meu computador. Os motivos são:
  • Questão da segurança: certificar-se de que está coerente com as atividades que você desempenha. Em outras palavras, nenhum processo está desviando seus dados.
  • Saber se sua rede está ativa.
  • Curiosidade. Já observou as taxas de transferências quando os arquivos são transmitidos por protocolos diferentes como http, ftp, scp, netbios entre outros?
  O script a seguir monitora a cada segundo a taxa de upload e download. A seguir os comentários das tarefas realizadas.
  O laço for mostra 999 vezes, mas pode ser interrompido com CTRL + C. Altere para a quantidade que convém.
  A variável antes_down pergunta para o ifconfig a quantidade de bytes total que passou pela placa de rede. O comando grep exibe a linha que contém o texto "TX bytes", o tr substitui símbolos por espaço em branco (' ') e então o awk exibe o terceiro campo ($3). A mesma ideia é aplicada para a variável antes_up. Em seguida, aguarda 1 segundo.
  Os mesmos procedimentos são aplicados para depois_down e depois_up. Como levou 1 segundo para coletar as novas informações, o programa subtrai a os valores de todos os bytes que passaram pela placa de rede neste intervalo. De posse dessa diferença, basta imprimir com o comando echo.

#!/bin/bash
# Murilo Fujita <murilofujita@gmail.com>
# Exibe taxas de download e upload
# Created in February, 20th, 2010

for i in `seq 999`
  do
   antes_down=`ifconfig wlan0 | grep "TX bytes" | tr '[:punct:]' ' ' | awk '{printf "%s\n",$3}'`
   antes_up=`ifconfig wlan0 | grep "TX bytes" | tr '[:punct:]' ' ' | awk '{printf "%s\n",$9}'`
   sleep 1
   depois_down=`ifconfig wlan0 | grep "TX bytes" | tr '[:punct:]' ' ' | awk '{printf "%s\n",$3}'`
   depois_up=`ifconfig wlan0 | grep "TX bytes" | tr '[:punct:]' ' ' | awk '{printf "%s\n",$9}'`
   printf "download: `echo "$depois_down-$antes_down" | bc | awk '{printf "%6s",$1}'` upload: `echo "$depois_up-$antes_up" | bc | awk '{printf "%6s\n",$1}' `\n"
   download=`echo "$depois_down-$antes_down" | bc`
   upload=`echo "$depois_up-$antes_up" | bc`
  done

  Neste caso foi usando o device wlan0. Lembre-se de substituir pelo nome que seu sistema está usando: ethX, pppX (comunicações seriais), entre outros.
  Bom proveito!