Teste de velocidade de conexão via FTP e registro em log

Publicado por Renato Augusto Andrade (última atualização em 06/12/2011)

[ Hits: 12.092 ]

Download testeftp




Escrevi e utilizo este programa há mais de dois anos para testar a velocidade da conexão em Vsats de um provedor de internet satelital onde trabalho.

Ele faz o download de três arquivos, sendo o primeiro de um servidor interno da rede do provedor e dois de origem externa, a fim de comparar as velocidades e ajudar a detectar alguma eventual anomalia no tráfego.

Resolvi publicar este script porque, apesar de ser muito simples, pode ser útil para quem está aprendendo Shell Script ou que tenha curiosidade em monitorar a qualidade de seu tráfego sem usar programas pesados.

A saída é um arquivo *.txt que poderá até mesmo ser importado para uma planilha sem a menor dificuldade.

E claro, este programa poderá ser executado manualmente ou agendado no CRON.

  



Esconder código-fonte

#!/bin/bash

###
###
###
###          Teste de FTP em Vsats
###              com cliente Linux 
###
###  
###    Desenvolvido por Renato Augusto Andrade
###           Belo Horizonte/MG   
### 
###      Por favor mantenha o nome do autor
### 
###
###


# Cria um 'arquivo temporario' para trabalhar as informacoes.
 log=".testeftplog"

# Arquivo onde serao gravados os resultados.
 arqsaida="ftp.txt "

# Isso foi necessidade particular do desenvolvedor, para prevenir
# que o CRON executasse o programa na raiz ou no diretorio /root.
usr=rede1
cd /home/$usr

# Armazena data e hora do teste.
agora=`date +%d/%m"-"%R`

# Armazena os nomes dos arquivos a descarregar.
 arqint="rpa2211.exe"
 arqext1="plenus.zip"
 arqext2="libtool-2.2.tar.bz2"

# Armazena os servidores.
 intftp="192.168.5.26"
 ext1ftp="ftp.cecom.ufmg.br"
 ext2ftp="ftp.unicamp.br"

# Armazena o caminho ate cada um dos arquivos a descarregar.
 #camint="pub/"
 camext1="pub/Plenus.32b/"
 camext2="pub/gnu/libtool/"

# Verifica se o arquivo de saida existe, e escreve os titulos.
 if [ ! -e $arqsaida ];then
    echo -e "DATA-HORA\tINTERNO\tEXTERNO1\tEXTERNO2" > $arqsaida;
    chown $usr:$usr $arqsaida;
    chmod 664 $arqsaida;
 fi
 
# Apaga, do diretorio atual, cada um dos arquivos a serem baixados,
# evitando erros de duplicidades ao executar o ftp.
 function apaga(){
  if [ -e $1 ];then rm -f $1;fi
 }
 for i in $log $arqint $arqext1 $arqext2;
   do apaga $i;
 done


# Filtra o resultado, trazendo somente o valor numerico. 
 function filtro(){
  cat $log | grep -i "/s" | sed s/\ /%/g | awk -F% '{print $7}' | sed s/\(//g
 }


# Executa o FTP interno.
function ftpint(){
 echo "Baixando arquivo $arqint."
  cat /dev/null > $log
  ftp -vin >> $log <<FIM_INT
   open $intftp
   user ftp 1dois3
   passive
   binary
   get $arqint
   bye
FIM_INT
}

# Executa o FTP externo 1.
function ftpext1(){
 echo "Baixando arquivo $arqext1."
   cat /dev/null > $log
   ftp -vin >> $log <<FIM_EXT1
    open $ext1ftp
    user anonymous guest
    passive
    binary
    cd $camext1
    get $arqext1
    bye
FIM_EXT1
}

# Executa o FTP externo 2.
function ftpext2(){
 echo "Baixando arquivo $arqext2."
 cat /dev/null > $log
 ftp -vin >> $log <<FIM_EXT2
  open $ext2ftp
  user anonymous guest
  passive
  binary
  cd $camext2
  get $arqext2
  bye
FIM_EXT2
}


# Transforma em decimal os resultados obtidos em notacao cientifica.
 function transf(){
 if [ -z `expr length $1` ];then
   echo "0";
 elif [ `expr length $1` -lt 5 ];then
   echo $1;
 else
  echo $1 | sed s/e/\*10/g | sed s/\+/\^/g | bc | \
  tr ['.'] [','] | sed s/,0//g;
 fi
 }


# Chama cada uma das funcoes e alimenta variaveis, bem como
# apresenta mensagem na tela, se for executado manualmente.
 clear
 echo -e "\n\t\t\tTESTE DE FTP"
 echo -e "\n\n\tNAO FECHE A JANELA ATE O PROGRAMA TERMINAR"
 echo -e "\n\nA janela se fecha sozinha."

 ftpint
 int=$( transf $(filtro) )
 ftpext1            
 ext1=$( transf $(filtro) )
 ftpext2
 ext2=$( transf $(filtro) )



# Escreve o resultado no arquivo de saida.
echo -e "$agora\t$int\t$ext1\t\t$ext2" >> $arqsaida


# Apaga os arquivos desnecessarios e sai do programa.
 for i in $log $arqint $arqext1 $arqext2;
 do apaga $i;
 done

 exit 0

Scripts recomendados

Limpar o cache do squid3 sem parar a internet por muito tempo

Medidor de bateria de laptop modo texto

Cotação de ações da BM&FBOVESPA no bash com Dialog

Shell Script básico para gerenciar usuários e bancos no MySQL ou MariaDB

Uso de variáveis com a linguagem Ruby


  

Comentários
[1] Comentário enviado por rodrigokx em 06/12/2011 - 10:11h

Escript ótimo pra estudar, Muito bom ..

Parabéns!

[2] Comentário enviado por CerberusBH em 06/12/2011 - 18:07h

Muito obrigado!


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts