_______ _______ ______ _______ ___ ___ _______ ___ ___ _______ _______ | || _ || _ | | _ || | | | | || | | | | || | | _ || |_| || | || | |_| || | | | | ___|| | | | | _ || _____| | |_| || || |_||_ | || | | | | |___ | | | | | | | || |_____ | ___|| || __ || || |___ | |___ | ___|| |___ ___ | | | |_| ||_____ | | | | _ || | | || _ || || || |___ | || | | | | | _____| | |___| |__| |__||___| |_||__| |__||_______||_______||_______||_______||___| |___| |_______||_______| Fast, parallelized, and automated file deployment for remote devices. tftp > [=======>file>--------] > devices
Uma ferramenta Python com interface gráfica (GUI) desenvolvida para automatizar a cópia e verificação de imagens IOS (ou outros arquivos) a partir de um servidor TFTP para a memória flash de múltiplos dispositivos Cisco. Este script otimiza o tempo e diminui o trabalho manual realizando as cópias de forma simultânea para diversos equipamentos.
Chefe:
Precisamos atualizar a versão de firmware de todos os dispositivos de rede da empresa devido a uma vulnerabilidade crítica que foi descoberta ontem a noite!
🔴E PRECISO DISSO PRONTO ATÉ AS 17H!!🔴
Time de Infra/Redes(você, no caso!):
Ah shit! Here we go again!
Você tem 90 switches, um servidor TFTP e a paciência de um monge. O que você vai fazer? 😭 <--esse é você
Copiar os arquivos um por um manualmente não é "trabalho de infra", é castigo divino. É aquele momento onde você se pergunta se deveria ter estudado botânica ou se deveria ter entrado pro teatro.
Esta ferramenta é um script Python com uma interface gráfica que fiz para que você não precise digitar copy tftp flash: até os seus dedos sangrarem.
Ele automatiza o tédio e faz o upload simultâneo para múltiplos dispositivos Cisco e depois(sim, tem mais!) da cópia ainda verifica se o arquivo foi copiado corretamente utilizando o hash MD5 dele. (porque a vida é curta demais para ficar acompanhando barras de progresso.)
- Multitarefa Real: Ele ataca vários dispositivos ao mesmo tempo. Enquanto o TFTP sofre fazendo todas as cópias, você finge que está lendo a documentação (na verdade você está vendo reels no Instagram).
- Verificação de espaço disponível: Cabe ou não cabe? Tem espaço livre ou não? Não importa! Você informa o tamanho do arquivo, o script verifica pra você, se não tiver ele te avisa e não copia o arquivo para o dispositivo sem espaço.
- Verificação de Integridade(hash MD5): Ele checa se o arquivo chegou inteiro ou se virou um amontoado de bits inúteis no meio do caminho.
- Interface Gráfica: Porque as vezes a gente só quer clicar em um botãozinho bonito ao invés de brigar com o terminal.
Gostou das cores? Bacana né? Foi o chatgpt que escolheu, disse que essas cores cansam menos a vista
Para utilizar este script, você precisará:
- Servidor TFTP: Um servidor TFTP configurado e operacional na sua rede, acessível pelos dispositivos, e com a imagem IOS(ou arquivo) que deseja copiar hospedada nele. Recomendado: Tftpd64
- Acesso aos Dispositivos: Credenciais (usuário e senha) para acesso SSH aos dispositivos.
- Café☕ e fé nos bits🙏
Python 3.x-
Baixe o Repositório:
git clone https://github.com/solopx/parallelios.git cd parallelios -
Instale as dependências:
pip install -r requirements.txt
-
Execute o Script:
python src/main.py
-
Preencha as Informações na GUI:
- TFTP Server IP Address: Endereço IP de seu servidor TFTP.
- Filename: Nome completo da imagem/arquivo no servidor TFTP (ex:
c2960s-universalk9-mz.152-7.E2.bin). - Hash MD5: O valor de hash MD5 esperado para o arquivo (verifique o hash MD5 do arquivo utilizando os comandos: certutil, md5sum ou através de fontes oficiais).
- Size(MB): Tamanho estimado do arquivo em
Megabytes(MB). O tamanho informado neste campo será utilizado para verificar se há espaço disponível nos dispositivos de destino antes de efetuar a cópia.Obs.: Se informado como 0 ou não informado esta verificação não será realizada. - Username: Seu nome de usuário para autenticação nos dispositivos.
- Password: Sua senha de autenticação nos dispositivos.
- Enable Pass: Marque esta checkbox caso os dispositivos necessitem de senha de enable e informe a mesma.
- Devices: Uma lista de endereços IP dos dispositivos de destino, separados por vírgula (ex:
192.168.1.1, 192.168.1.2, 192.168.1.3).
-
Iniciar Cópia(s): Clique no botãozinho bonito "Start Transfer".
-
Output Log: O log de saída na parte inferior da janela mostrará o status de cada dispositivo em tempo real.
-
Tome seu café e aprecie a bela paisagem de seu escritório enquanto aguarda o fim de todo o processo.
Você pode obter o hash MD5 do arquivo a ser copiado a partir de fontes confiáveis como: sites oficiais ou utilizando a linha de comando.
Para checar o hash MD5 de um arquivo em sistemas windows utilize o seguinte comando no prompt:
certutil -hashfile "C:\Caminho\Do\Arquivo Desejado.bin" MD5Para sistemas linux\unix utilize:
md5sum "C:\Caminho\Do\Arquivo Desejado.bin"Em algumas versões de IOS, o tamanho do pacote TFTP pode ser personalizado para otimizar o tempo de cópia, você pode verificar se seus dispositivos possuem esta funcionalidade com o comando:
Switch(config)# ip tftp blocksize <valor>Os valores válidos são entre 512(padrão) a 8192.
O script gera um arquivo de log chamado copy-tftp-flash.log no mesmo diretório de execução. Este arquivo contém detalhes de baixo nível das interações com os dispositivos e é extremamente útil para depuração.
O campo MAX_WORKERS define o número máximo de operações de cópia simultâneas. O valor padrão é 5. Se você estiver processando um grande número de dispositivos e tiver uma infraestrutura de rede robusta e um servidor TFTP capaz, você pode ajustar este valor para aumentar o número de transferências simultâneas e o desempenho. Tenha em mente que, no entanto, um valor muito alto pode sobrecarregar seus recursos.
Já o campo TRANSFER TIMEOUT define o tempo máximo(em minutos) que o script irá aguardar para trasnferir o arquivo selecionado para cada dispositivo.
Esta aplicação atualmente está dividida em 3 arquivos principais:
-
main.py- Ponto de entrada da aplicação. Conecta a interface gráfica à lógica de rede, gerencia validações de input e controla o fluxo de execução. -
gui.py- Interface gráfica em Tkinter. Define o layout, estilos visuais e expõe os widgets para o main orquestrar. -
tftp_engine.py- Motor de transferência TFTP. Executa conexão SSH, verificação de espaço, cópia de arquivos e validação MD5 nos dispositivos.
Em futuros updates pretendo colocar uma música suave de elevador enquanto as cópias são realizadas e um barulho de buzina de caminhão quando elas forem concluídas. Também pretendo inserir suporte a dispositivos Cisco Nexus e outros fabricantes.
Contribuições são bem-vindas! Se você tiver ideias para melhorias, sinta-se à vontade para abrir uma issue ou enviar um pull request.
Este projeto está licenciado sob a Licença MIT. Veja o arquivo LICENSE para mais detalhes.
Desenvolvido por solopx GitHub: https://github.com/solopx/

