◇ OpenCyber Academy
Tecnólogo · Capítulo 3 · Português

Capítulo 3 — Fundamentos de programação

Ensino gratuito e aberto para quem deseja proteger pessoas e tecnologias. Não é preciso criar uma conta para estudar ou consultar as respostas.

Capítulo 3 — Fundamentos de programação

Mapa da aula

Aula 03 publicada. Mapa, exemplo, EX007.

flowchart TD
  N0["3.1 Por que tecnólogos escrevem scripts"]
  N1["3.2 Dicionários para consultas"]
  N2["3.3 Dado ausente é um resultado"]
  N3["3.4 Saída legível"]
  N4["Síntese"]
  N0 --> N1 --> N2 --> N3 --> N4
  N4 --> EX["Exemplo resolvido"]
  EX --> Q["Exercício EX007"]

Desenho lógico

flowchart LR
  N0["3.1 Por que tecnólogos escrevem scripts"]
  N1["3.2 Dicionários para consultas"]
  N2["3.3 Dado ausente é um resultado"]
  N3["3.4 Saída legível"]
  N4["Síntese"]
  N0 --> N1 --> N2 --> N3 --> N4 --> Q["EX007"]
[3.1 Por que tecnólogos escrevem scripts]
    |
    v
[3.2 Dicionários para consultas]
    |
    v
[3.3 Dado ausente é um resultado]
    |
    v
[3.4 Saída legível]
    |
    v
[Síntese]
    |
    v
[Exemplo resolvido] --> [Exercício EX007]

Objetivos de aprendizagem

Você vai (1) escrever programas curtos em Python usando apenas a biblioteca padrão; (2) usar listas, dicionários e laços para processar registros; (3) tratar dados ausentes de forma explícita; e (4) manter os scripts legíveis para colegas que não são programadores.

3.1 Por que tecnólogos escrevem scripts

Boa parte do trabalho de segurança de TO é comparar listas: ativos na documentação versus ativos vistos na rede, fluxos aprovados versus fluxos observados, datas de certificados versus a data de hoje. Fazer isso a olho, em centenas de linhas, é lento e sujeito a erros. Um script de vinte linhas faz isso sempre do mesmo jeito, e a sua saída pode ser anexada a um chamado. O primeiro script desse tipo de Priya comparou a documentação da empresa contratada com uma observação passiva e produziu a saída de cinco linhas do Capítulo 11: duas correspondências, uma câmera presente só na rede, a HMI-C presente só nos documentos e o conflito de versão do PLC-R2.

3.2 Dicionários para consultas

Um dicionário Python mapeia uma chave (nome do dispositivo) para um valor (versão de firmware). Verificar "este dispositivo está documentado?" vira name in docs, que é rápido e legível. Conjuntos (sets) dão união e diferença diretamente: set(a) - set(b) lista o que está em a mas não em b. O script de inventário de Priya mantém um dicionário vindo dos documentos da empresa contratada e outro vindo da observação passiva, cada um mapeando um nome de dispositivo para a sua string de firmware. A união dos dois conjuntos de chaves é a lista completa de dispositivos a reportar; as diferenças são os dois grupos interessantes, a CAM-DOCK só na rede e a HMI-C só nos documentos.

3.3 Dado ausente é um resultado

Quando um valor está ausente, diga isso na saída. dict.get(key) devolve None em vez de quebrar, e o script pode imprimir "-" e um estado como "only-in-docs". Pular silenciosamente as linhas com dados ausentes é como as lacunas desaparecem dos relatórios. O primeiro rascunho de Priya fez exatamente isso: percorria só as correspondências, de modo que a CAM-DOCK, ausente dos documentos, nunca aparecia. Um colega perguntou onde estava a câmera. A correção dela foi uma linha, percorrendo sorted(set(docs) | set(seen)), de modo que todo dispositivo é impresso com um estado e o ausente diz isso. A saída do Capítulo 11 agora mostra docs=- para a CAM-DOCK em vez de omiti-la.

3.4 Saída legível

Alinhe as colunas com larguras de f-string (f"{name:9}") e coloque a decisão no fim de cada linha. Um revisor pode então percorrer a última coluna em busca de qualquer coisa que não seja "match". Na saída do Capítulo 11, a última coluna diz only-on-network, match, only-in-docs, match e VERSION-CONFLICT, de modo que um gerente de instalações encontra as três linhas que pedem ação sem ler as strings de firmware. Os nomes dos dispositivos são preenchidos até nove caracteres, o que mantém alinhadas as colunas de documentação e de rede mesmo para a CAM-DOCK. Um revisor que veja um estado fora dos cinco valores documentados sabe que o script encontrou uma entrada que não entende.

Exemplo resolvido (NCS sintética)

Priya escreve um laço sobre dois dicionários, um vindo da documentação da empresa de refrigeração e outro de uma observação passiva da rede. O primeiro rascunho imprimia só as correspondências; um colega perguntou onde estava a CAM-DOCK. Ela o reescreveu para percorrer a união das chaves, de modo que todo dispositivo aparece com um estado. A versão completa é o laboratório do Capítulo 11.

Caso sintético — Northgate Cold Storage. Os dados são inventados.

Erros e limites

Scripts que leem dispositivos ativos precisam de uma permissão de trabalho e de limites de taxa cuidadosos; os scripts deste curso leem apenas arquivos. Dê às variáveis nomes que digam o que elas guardam, e não x e y.

Exercícios

Síntese

Scripts pequenos e legíveis que reportam todas as linhas — inclusive as ausentes — transformam a comparação de listas em evidência repetível.

Continue estudando — capítulo 03 de 30

← Capítulo 02 · Índice de capítulos do curso · Capítulo 04 →

Siga para a próxima lição escrita.