Skip to content

Latest commit

 

History

17 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

 _______  _______  ______    _______  ___      ___      _______  ___            ___   _______  _______ 
|       ||   _   ||    _ |  |   _   ||   |    |   |    |       ||   |          |   | |       ||       |
|    _  ||  |_|  ||   | ||  |  |_|  ||   |    |   |    |    ___||   |          |   | |   _   ||  _____|
|   |_| ||       ||   |_||_ |       ||   |    |   |    |   |___ |   |          |   | |  | |  || |_____ 
|    ___||       ||    __  ||       ||   |___ |   |___ |    ___||   |___  ___  |   | |  |_|  ||_____  |
|   |    |   _   ||   |  | ||   _   ||       ||       ||   |___ |       ||   | |   | |       | _____| |
|___|    |__| |__||___|  |_||__| |__||_______||_______||_______||_______||___| |___| |_______||_______|

Fast, parallelized, and automated file deployment for remote devices.
tftp > [=======>file>--------] > devices

Python Tkinter License: MIT

Parallel.IOS

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.


Cenário Típico:

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!):

Screenshot 1
Ah shit! Here we go again!

O Problema:

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.

A Solução? (Ou quase isso):

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.)

O que ele faz? (além de salvar seu tempo):

  1. 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).
  2. 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.
  3. 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.
  4. Interface Gráfica: Porque as vezes a gente só quer clicar em um botãozinho bonito ao invés de brigar com o terminal.
  5. Check IOS Version: Consulta a versão de IOS/NX-OS rodando nos dispositivos, caso você tenha esquecido.
  6. Check Free Space: Acessa os dispositivos e verifica o espaço disponível na flash/bootflash dos mesmos.

Compatibilidade

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.

Screenshots

Screenshot 1

Screenshot 1

Screenshot 1


Gostou das cores? Retrô está na moda de novo!

Pré-requisitos

Para utilizar este script, você precisará:

  1. 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
  2. Acesso aos Dispositivos: Credenciais (usuário e senha) para acesso SSH aos dispositivos.
  3. Café☕ e fé nos bits🙏

Como Usar

Pré-requisitos

Python 3.x

Linux: 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   # Fedora

No 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.

Execução

  1. Baixe o Repositório:

    git clone https://github.com/solopx/parallelios.git
    cd parallelios
  2. Instale as dependências:

    pip install -r requirements.txt
  3. Execute o Script:

    python src/main.py
  4. 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.
  5. Iniciar Cópia(s): Clique no botãozinho bonito "Start Transfer".

  6. Output Log: O log de saída na parte inferior da janela mostrará o status de cada dispositivo em tempo real.

  7. Tome seu café e aprecie a bela paisagem de seu escritório enquanto aguarda o fim de todo o processo.

Notas

(clique para expandir)

Hash MD5:

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" MD5

Para sistemas linux\unix utilize:

md5sum  "C:\Caminho\Do\Arquivo Desejado.bin"

Tamanho dos pacotes TFTP:

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.

Troubleshooting e Logs de Debug

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.

Observações sobre MAX_WORKERS e TIMEOUT_MAX

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.

Estrutura de Arquivos

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.

Futuro

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

Contribuições são bem-vindas! Se você tiver ideias para melhorias, sinta-se à vontade para abrir uma issue ou enviar um pull request.

Licença

Este projeto está licenciado sob a Licença MIT. Veja o arquivo LICENSE para mais detalhes.


Desenvolvido por solopx GitHub: https://github.com/solopx/

About

PT - App em Python com GUI para transferência paralela de arquivos via TFTP para múltiplos dispositivos Cisco IOS, IOS-XE e NX-OS, com verificação de integridade MD5. EN - Python App with GUI for parallel TFTP file transfers to multiple Cisco IOS, IOS-XE and NX-OS devices, with MD5 integrity verification.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Contributors

Languages