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 ]
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.
#!/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
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
Compartilhando a tela do Computador no Celular via Deskreen
Como Configurar um Túnel SSH Reverso para Acessar Sua Máquina Local a Partir de uma Máquina Remota
Configuração para desligamento automatizado de Computadores em um Ambiente Comercial
Como renomear arquivos de letras maiúsculas para minúsculas
Imprimindo no formato livreto no Linux
Vim - incrementando números em substituição
Efeito "livro" em arquivos PDF
Como resolver o erro no CUPS: Unable to get list of printer drivers
Melhorando a precisão de valores flutuantes em python[AJUDA] (7)
Vou voltar moderar conteúdos de Dicas e Artigos (1)
SysAdmin ou DevOps: Qual curso inicial pra essa área? (3)
[Python] Automação de scan de vulnerabilidades
[Python] Script para analise de superficie de ataque
[Shell Script] Novo script para redimensionar, rotacionar, converter e espelhar arquivos de imagem
[Shell Script] Iniciador de DOOM (DSDA-DOOM, Doom Retro ou Woof!)
[Shell Script] Script para adicionar bordas às imagens de uma pasta