A única forma eficaz de verificar a velocidade da sua conexão

Constantemente nos perguntamos qual é a velocidade real que estamos navegando. Seja por linha discada, ADSL, 3G, Ethernet… não importa isso é essencial até mesmo para satisfazer o ego dos abençoados com links de 8mbps ou mais. O que mostro aqui é simplesmente um shell-script que calcula a velocidade lendo os dados do diretório virtual /sys existente em qualquer distribuição Linux com kernel 2.6.

Indo direto ao script

R1=`cat /sys/class/net/ppp0/statistics/rx_bytes` ; R2=$R1;
while [ 1=1 ]; do
R2=`cat /sys/class/net/ppp0/statistics/rx_bytes`; SPEED=$(( ($R2 - $R1)/10 ));
R1=$R2; echo $SPEED "bytes/s"sleep 10s; done

Só isso! Desculpe se você esperava mais do que isso, mas isso é suficiente para ler ler o total de bytes recebidos[1] por sua conexão ppp0[2] a cada 10s[3], se quiser em bits/s apenas acrescente um “*8” na fórmula, já que para converter de bytes para bits basta multiplicar os bytes por 8.

[1] Veja que o arquivo lido é o rx_bytes, se quiser medir a velocidade de upload substitua pelo arquivo tx_bytes, nas duas ocorrências;

[2] Note que para mudar a interface de rede bata mudar o diretório ppp0 pelo correspondente a sua interface ligada ao modem ADSL, eth0, por exemplo;

[3] A medição é feita pela média de 10 segundos de leitura, mas se quiser uma medida em tempo real – a cada segundo – mude o valor (em segundos) tanto na fórmula da variável SPEED e no comando sleep.

Concluindo

É claro que isso poderia ser mais bonito, usando um monte de variáveis de configuração bonitas ou mesmo ler estes parâmetros pela linha de comando. Mas meu objetivo era só mostrar o quanto é simples fazer tal leitura.

Agora use a criatividade e desenvolva o seu poderoso utilitário para monitorar a rede, na linguagem de sua escolha, ou simplesmente use-o como está.

Se quiser também leia o post sobre os arquivos úteis em /proc e /sys para ver o que mais se pode fazer com o conteúdo destes sistemas de arquivo virtuais e divirta-se!

Atualização: Veja o comentário nº 1 para ver uma versão mais elaborada.

7 thoughts on “A única forma eficaz de verificar a velocidade da sua conexão”

  1. Só para constar. Esta versão está um pouco mais elaborada (talvez menos didática), mas por outro lado é mais funcional, já que possui variáveis de configuração para facilitar a mudança de interface, do intervalo de atualização e a escolha do tráfego de download (rx) ou upload (tx)

    IFACE=ppp0;
    INTERVALO=10;
    TRAFEGO=rx;
    R1=`cat /sys/class/net/${IFACE}/statistics/${TRAFEGO}_bytes` ;
    R2=${R1};
    while [ 1=1 ]; do
    R2=`cat /sys/class/net/${IFACE}/statistics/${TRAFEGO}_bytes`;
    SPEED=$(( (${R2} – ${R1})/${INTERVALO} ));
    R1=${R2}; echo ${SPEED} “bytes/s”; sleep ${INTERVALO}s; done

  2. Interessante a publicação.
    Apenas acho desnecessário o “R2=$R1;” na primeira linha. O R2 recebe dentro do laço os valores de rx_bytes, perdendo os dados antigos.

  3. Interessante a publicação.
    Apenas acho desnecessário o “R2=$R1;” na primeira linha. O R2 recebe dentro do laço os valores de rx_bytes, perdendo os dados antigos.
    Outra coisa, textando simplesmente os valore de rx_bytes (cat /sys/class/net/ppp0/statistics/rx_bytes) entendo que ele dá o número de bytes a cada momento. Se quisermos a média de 10 segundos teríamos que ler a cada 10 segundos somar esses valores e dividir por 10.
    Experimentem mudar o script acima para 5 ou 2 segundos. Verão que a média aumenta.
    Penso que seria assim:
    #!/bin/bash
    SPEED=`cat /sys/class/net/eth0/statistics/rx_bytes`;
    echo “Iniciando..”;
    while [ 1=1 ]; do
    SRX=0;
    for k in {1..10}; do
    RX=`cat /sys/class/net/eth0/statistics/rx_bytes`;
    SRX=$(($SRX+$RX));
    sleep 1s;
    done
    SPEED=$((($SRX)/10))
    echo $SPEED “bytes/s”;
    done

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *