_______ _______ ______ _______ ___ ___ _______ ___ ___ _______ _______ | || _ || _ | | _ || | | | | || | | | | || | | _ || |_| || | || | |_| || | | | | ___|| | | | | _ || _____| | |_| || || |_||_ | || | | | | |___ | | | | | | | || |_____ | ___|| || __ || || |___ | |___ | ___|| |___ ___ | | | |_| ||_____ | | | | _ || | | || _ || || || |___ | || | | | | | _____| | |___| |__| |__||___| |_||__| |__||_______||_______||_______||_______||___| |___| |_______||_______| Fast, parallelized, and automated file deployment for remote devices. tftp > [=======>file>--------] > devices
Parallel.IOS é uma ferramenta desenvolvida em Python com interface gráfica voltada para a orquestração e automação do ciclo de cópia e verificação de arquivos para dispositivos Cisco IOS e NX-OS. A aplicação abstrai a camada de CLI, permitindo que o analista gerencie transferências simultâneas via TFTP através de um mecanismo de multithreading configurável. O resultado é uma operação de atualização de firmware mais segura, previsível e com tempo de execução drasticamente reduzido.
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: A aplicação processa 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.
- Check IOS Version: Consulta a versão de IOS/NX-OS rodando nos dispositivos, caso você tenha esquecido.
- Check Free Space: Acessa os dispositivos e verifica o espaço disponível na flash/bootflash dos mesmos.
Este script é compatível com dispositivos Cisco IOS/IOS-XE e NX-OS (Nexus). Basta selecionar o módulo correspondente no campo Module da seção "Advanced Config" antes de iniciar a transferência. Outros sistemas operacionais de rede (como Junos, Arista EOS, etc.) ainda NÃO são suportados.
Gostou das cores? Retrô está na moda de novo!
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.xLinux: o módulo tkinter (usado pela interface gráfica) não é instalável via pip — é um pacote do sistema operacional, separado do Python. Se ao executar o script aparecer ModuleNotFoundError: No module named 'tkinter', instale-o manualmente:
sudo apt install python3-tk # Debian/Ubuntu
sudo dnf install python3-tkinter # FedoraNo Windows, o instalador oficial do python.org já inclui o Tcl/Tk por padrão (opção "tcl/tk and IDLE" marcada) — só costuma faltar em instalações mínimas/customizadas.
-
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.
Obs.: Esta opção é desabilitada automaticamente ao selecionar o módulo "Cisco NX-OS", já que o NX-OS não utiliza enable mode. - Module: Selecione o tipo de dispositivo de destino: Cisco IOS ou Cisco NX-OS.
- Devices: Uma lista de endereços IP dos dispositivos de destino, separados por vírgula ou por linha.
-
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.
(clique para expandir)
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, copy-tftp-flash.log, na raiz do projeto. 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 nos seguintes arquivos principais:
-
main.py- Ponto de entrada da aplicação. -
gui.py- Interface gráfica em Tkinter. -
engine_core.py- Funções e estado compartilhados entre os motores de transferência. -
ios_engine.py- Motor de transferência específico para dispositivos Cisco IOS/IOS-XE. -
nxos_engine.py- Motor de transferência específico para dispositivos Cisco NX-OS.
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 outros fabricantes e ao protocolo SCP/SFTP como alternativa ao TFTP.
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/


