Retour à Bouraq

Vrai transfert optique · sans compte

Faites passer ce fichier Python de votre écran à votre téléphone.

Un banc de test isolé ne répond plus. Ce script Python transforme ses logs en rapport d’incident avec chronologie, détection d’anomalies et masquage des identifiants. Scannez 18 QR codes sur trois pages de six pour recevoir les 41.2 Ko de code source vérifié.

Sur quel appareil êtes-vous ?

Il vous faut un écran d’ordinateur et un téléphone. Sans compte ni installation.

  1. Ouvrez le scanner sur votre téléphone

    Scannez ce QR de lien avec l’appareil photo habituel du téléphone, puis ouvrez le lien.

  2. Autorisez la caméra du téléphone

    Sur votre téléphone, touchez Démarrer la caméra et autorisez l’accès. Gardez cette page ouverte sur l’ordinateur.

  3. Lancez les trois pages de QR codes

    Lancez le transfert sur l’ordinateur, puis pointez votre téléphone vers les six codes. Les trois pages tournent en boucle ; chaque code ne doit être lu qu’une fois.

Le fichier original
PYairgap_incident_report.py41,231 B
#!/usr/bin/env python3
"""The isolated test bench stopped at 02:17. Your colleague needs the evidence.

AIR-GAP INCIDENT REPORT: turn local logs into a brief you can carry through QR.
A useful example for OT engineers, lab teams and developers on restricted PCs.
No USB, network connection, package installation or equipment access required.

Try the SYNTHETIC acceptance-bench incident (no real plant or customer data):
    python airgap_incident_report.py --demo --output bench-brief
    # Open bench-brief/report.html locally. No web server is needed.
    # A crash, repeated PLC reconnects and rising temperature become a timeline.

For approved exports:
    python airgap_incident_report.py --input controller.csv \
        --input service.jsonl --output incident-brief

Required fields: timestamp, asset, event. Use --schema for supported values.
Timestamps require Z or an explicit UTC offset. Input: UTF-8 CSV or JSONL.
Output: escaped HTML, JSON summary, source and handoff SHA-256 manifests.
Identifiers are pseudonymised by default. Review free text before sharing;
redaction cannot recognise every secret. --keep-identifiers is local-use only.
Correlation is not causation. This is triage, not safety approval or control.
Python 3.10+; standard library only. The web demo transfers, never runs, this file.
"""
from __future__ import annotations

import argparse
import csv
import hashlib
import io
import ipaddress
import json
import math
import re
import statistics
import sys
from collections import Counter, defaultdict
from dataclasses import dataclass, field
from datetime import datetime, timedelta, timezone
from html import escape
Aperçu · 40 premières lignes
Le flux de QR codes
18 QR · 3 × 6
Page 1 / 3Prêt à envoyer. Lancez la lecture, puis scannez avec votre téléphone.
Trois pages. Six QR codes par page.

Préparez votre téléphone ci-dessus, puis lancez le transfert.

Trois pages de six QR codes défilent en boucle jusqu’à la pause. Commencez à 6 secondes par page, ou choisissez 2,5 ou 4 secondes si votre caméra suit. Une page ratée revient au tour suivant.

Exemple public uniquement (41231 octets). Les images de la caméra et la reconstruction du fichier restent dans votre navigateur. Le code Python est affiché et téléchargé, jamais exécuté. Un compte Bouraq est nécessaire pour transférer vos propres fichiers.