Git Product home page Git Product logo

internet_speed's Introduction

Shell Script Internet Monitor

O script de teste de velocidade de internet pelo terminal utiliza a linguagem Shell Script no terminal bash nos sistemas Ubuntu e Debian. Através dele é possível fazer medições pelo terminal utilizando a ferramenta speedtest-cli montando um HTML recursivo para o envio das medições através de um e-mail, montado e enviado por linha de comando através da configuração de um smtp relay na maquina em que a ferramenta é executada.

A estrutura do Script

O script utiliza a estrutura de parâmetros, o primeiro deles é o global que tem a função de fazer verificações no sistema operacional da maquina a fim de identificar incompatibilidades, dependências e configurações, e também inicia a escrita do cabeçalho HTML em um arquivo de log temporário.

O segundo parâmetro é o coleta que propriamente dito é o core do script, ele faz as medições de velocidade pelo terminal e armazena o link das imagens geradas pelo teste, inserindo-os no corpo do HTML de log.

O terceiro parâmetro é o envia, como o nome já diz, antes de enviar o teste, ele fecha o rodapé do arquivo HTML de log, faz uma verificação no sistema operacional a fim de identificar se o recurso de SMTP Relay está ativo, dispara a mensagem, e apaga os arquivos temporários gerados pelo processo.

Dependências do script

Durante a execução acionada pelo parâmetro global algumas verificações de dependências serão feitas, uma delas é a distro Linux, o script foi elaborado para ser executado em sistemas Ubuntu ou Debian, existe até mesmo uma lógica que verifica se um desses dois sistemas está embarcado dentro de um sistema Windows 10/2012/2016/2019, porém outras distros que não sejam essas não serão capazes de executar a ferramenta.

Outra rotina executada é a busca pela ferramenta do speedtest-cli que deve estar devidamente armazenada no local /usr/bin/

O próximo passo da verificação é checar se existem instalados no sistema operacional da máquina os programas: curl mailutils postfix wget mutt dnsutils

Sendo assim, basta executar o seguinte comando em um sistema Debian ou Ubuntu para habilitar a execução da ferramenta:

sudo apt install mailutils wget mutt dnsutils postfix -y; wget https://raw.githubusercontent.com/sivel/speedtest-cli/master/speedtest.py -O speedtest-cli; sudo chmod +x speedtest-cli; sudo mv speedtest-cli /usr/bin/speedtest-cli

Execução do script

Para executar o script com os parâmetros na ordem correta, devemos fazer o seguinte:

Primeiro dar permissão de execução a ele: sudo chmod +x internet_speed.sh

Em seguida devemos executá-lo com o primeiro parâmetro: ./internet_speed.sh global

Depois executamos a coleta dos testes: ./internet_speed.sh coleta

E por último, o terceiro parâmetro, o de fechamento e envio do arquivo HTML: ./internet_speed.sh envia

Caso seja executado sem nenhum parâmetro o próprio script informará que necessita de um desses três para funcionar.:

enter image description here

Caso ainda sim os parâmetros coleta ou * envia sejam executados sem o parâmetro global (que deve ser o primeiro a ser executado), esses dois últimos invocam automaticamente o parâmetro global para iniciar o arquivo de log, pois sem ele seria impossível montar o arquivo HTML.

É possível também executar o script em modo debug, para isso basta adicionarmos o comando bash -x no terminal bash: bash -x internet_speed.sh global

Proteção contra quebras

Mesmo sendo criado inteiramente em Shell Script a ferramenta possui redundâncias que biscam prevenir falhas de execução, rechecagem de variáveis, segmentação de blocos para evitar rotinas muito grandes, limpeza de arquivos temporários de logs, porém mesmo assim pode ser que ainda hajam falhas, o quanto antes eu as descobrir irei as concertando, assim como irei melhorando ainda mais o código da ferramenta com o tempo, que teve a sua primeira versão criada em 2017.

Eu sei que existem métodos melhores, mais práticos e robustos de se fazer o que esse script se propõem a fazer, eu mesmo sou utilizador do Zabbix e do Grafana, porém a diversão e desafio me motivam a continuar escrevendo esse arquivo.

Variáveis Internas do Script

A ferramenta conta com alguns blocos de variáveis, porém pelo menos um deles é crucial o preenchimento por parte do usuário ou administrador antes da execução do mesmo. Esse bloco de comandos seria o VARS_HTML (que na versão atual começa mais ou menos pela linha 10 do arquivo) que refere as variáveis que serão escritas no arquivo HTML e os endereços de origem e destino de e-mails a serem enviados via SMTP Relay do sistema operacional da máquina.:

enter image description here

Limitações do Script

Infelizmente na versão atual o script suporta apenas seis medições consecutivas por log, mais medições que isso podem quebrar as tabelas internas do HTML e desconfigurar o arquivo de log enviado por e-mail.

Fora isso não há limitações por parte do HTML, que por ser recursivo, se adapta muito bem tanto a visualizações em desktops quanto por dispositivos móveis:

Executando o Script

O ideal seria colocar o script em execução automática pelo cron da máquina, e como temos a limitação de seis medições por arquivo de log, o ideal é agendar a execução da ferramenta pelo arquivo crontab da máquina, para uma medição diária de velocidade de internet, podemos usar os seguintes parâmetros no cron da estação.

Partamos do exemplo que o scipt esteja armazenado no diretório /script, veja o exemplo de como ficariam as entradas dele no crontab /etc/crontab da máquina:

## Medindo a velocidade da internet
## 0 - Coletando criando o cabecalho do script e aguardando as coletas
00	07	*	*	*	root	/scripts/internet_speed.sh global
## 1 - Primeira coleta de informacoes de velocidade da MANHA
01	08	*	*	*	root	/scripts/internet_speed.sh coleta
## 2 - Segunda coleta de informacoes de velocidade da MANHA
02	10	*	*	*	root	/scripts/internet_speed.sh coleta
## 3 - Primeira coleta de informacoes de velocidade da TARDE
03	12	*	*	*	root	/scripts/internet_speed.sh coleta
## 4 - Segunda  coleta de informacoes de velocidade da TARDE
04	14	*	*	*	root	/scripts/internet_speed.sh coleta
## 5 - Primeira coleta de informacoes de velocidade da NOITE
05	16	*	*	*	root	/scripts/internet_speed.sh coleta
## 6 - Segunda coleta de informacoes de velocidade da NOITE
06	18	*	*	*	root	/scripts/internet_speed.sh coleta
## 7 - Envio do arquivo de log
10	18	*	*	*	root	/scripts/internet_speed.sh envia
#

Modelos do e-mail de log

Seguem a baixo modelos dos e-mails enviados pelo script via SMTP Relay do sistema operacional da máquina:

Modelo Desktop

enter image description here

Modelo Mobile

enter image description here

Arquivo de HTML de log

O arquivo HTML de log é formado por um código recursivo qeu se adapta tanto a telas de computadores quanto de despositivos móveis, o modelo utilizado nessa ferramenta é uma edição do projeto original que pode ser converido aqui nesse link, com tudo ,segue também junto a esse projeto uma amostra de tódo o código HTML que é utilizado nessa ferramenta.

Considerações Finais sobre o script

Como parte de um projeto aberto, voluntário e feito por hobby, não posso dar garantia de que essa ferramenta ira rodar em todos os sistemas em que ela se propõe a ser executada, com tudo, me coloco a diposição para ajuda e feedbacks, qualquer coisa é só entrar em contato pelo e-mail [email protected] - Grande abraço a todos!

STMP Relay

Fazendo STMP Relay

Vamos criar aqui um exemplo de configuração de SMTP Relay para ser usado junto a um e-mail da Google, porém também já o utilizei com e-mails Microsfot.

1. Durante a instalação do smtp (apt install postfix) configure o seu e-mail na tela que a instalação do Postfix lhe perguntará. Ex: [email protected]

2. Faça um backup do arquivo de configuração do Postfix e em seguinda abra o arquivo de configuração com o seu editor favorito, no exempo a baixo usarei o vim:

 cp /etc/postfix/main.cf /etc/postfix/BKP.main.cf; vim /etc/postfix/main.cf

3. No final do arquivo de configuração do postfix, adicione as seguintes linhas (lembre-se de fazer as adequações pro seu e-mail):

relayhost = [smtp.gmail.com]:587
...
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sasl_security_options = noanonymous
smtp_tls_security_level = encrypt
smtp_tls_CAfile = /etc/ssl/certs/ca-certificates.crt

Caso já exista um campo chamado relayhost = basta apagá-lo e colar o bloco a cima no arquivo, ou então preenchê-lo com a informação depois do caractere = e ignorar esse campo do bloco a cima.

Um outro detalhe é o campo inet_protocols que fica no final do arquivo main.cf. em máquinas que não conseguem resolver classes de IPv6 o envio de e-mail pode ser perder tentando resolver endereços da Google, a saída nesses casos então é alterar o campo: inet_protocols = all para inet_protocols = ipv4 como mostra a figura a baixo:

enter image description here

4. Vamos criar o arquivo sasl_passwd e preenchê-lo com as informações da conta:

vim /etc/postfix/sasl_passwd

Dentro dele vamos colocar as seguintes informações:

[smtp.gmail.com]:587 [email protected]:suasenha

5. Vamos proteger o arquivo com as informações sensíveis de usuário e senha:

chown root:root /etc/postfix/sasl_passwd; chmod 600 /etc/postfix/sasl_passwd
  1. E por último, vamos criar o banco com as informações de usuário e senha de e-mail e restartar o serviço do postfix com os seguintes comandos:
postmap /etc/postfix/sasl_passwd; sudo systemctl restart postfix
  1. E por último, tente enviar um e-mail de testes pelo terminal e veja se ele chega no destino:
echo "Test Postfix Gmail Relay" | mail -s "Postfix Gmail Relay" [email protected]

Debugando o STMP Relay

Caso o e-mail via terminal não chegue ao destino, tente verificar o arquivo de log dos e-mails, faça isso com o seguinte comando:

tail  /var/log/mail.log

Ou abra outro terminal, e fique monitorando o arquivo de log enquanto vc envia o e-mail de teste pelo primeiro terminal, para isso você pode usar o parâmetro -f no comando tail:

tail -f /var/log/mail.log

G-mail e os Aplicativos menos seguros

Se por algum motivo você estiver percebendo problemas no envio de e-mail, e entradas no log como "sasl falha de autenticação" veja se a opção de logins de aplicativos menos seguros está habilitada no seu G-mail, você pode fazer isso no seguinte link.

Veja o exemplo de como esse erro é descrito no log dos e-mails do sistema:

enter image description here

Executando o script em vários servidores com a mesma conta de email

Se mesmo após os procedimentos a cima estarem certos e a máquina com o Relay de SMTP ainda não estiver disparando os e-mails, pode ser que você tenha configurados muitas máquinas diferentes para enviar os logs de teste de velocidade por um único endereço de e-mail.

Isso se resolve se você estiver na máquina que está disparando os e-mails via relay, ou em alguma outra máquina que esteja na mesma rede que a máquina que esteja disparando o relay (é importante as duas terem o mesmo IP público), logue no seu e-mail via navegador, e abra a mensagem que informará uma atividade de login bloqueada:

enter image description here

Certifique-se pela data e hora que foi mesmo a sua tentativa de login, e se tudo estiver certo, clique em verificar atividade e em seguida confirme que foi você e autorize o login:

enter image description here

E com isso você já deve conseguir enviar e-mails pelo terminal normalmente, agende as coletas e envios do script de teste de velocidade e seja feliz =)

internet_speed's People

Contributors

luizpeterli avatar

Stargazers

 avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.