← retour aux outils back to tools

# termineter

Framework de test de sécurité pour smart grid / smart meter. Teste les dispositifs AMI (Advanced Metering Infrastructure) via des interfaces optiques/série en utilisant les protocoles ANSI C12.18 et C12.19. Smart grid / smart meter security testing framework. Tests AMI (Advanced Metering Infrastructure) devices over optical/serial interfaces using the ANSI C12.18 and C12.19 protocols.

↗ https://github.com/rsmusllp/termineter

## Overview

Termineter is a framework for testing smart meters and AMI infrastructure. It communicates over optical (IR) and serial interfaces using the ANSI C12.18/C12.19/C12.22 protocols to enumerate, read, and write meter tables — allowing security researchers to assess smart meter vulnerabilities.

## Installation

    git clone https://github.com/rsmusllp/termineter
    cd termineter
    pip3 install -r requirements.txt
    python3 termineter

## Basic Usage

Launch interactive framework

    python3 termineter

    # Connect to meter (optical probe on /dev/ttyUSB0)
    termineter > set CONNECTION /dev/ttyUSB0
    termineter > connect

List modules

    termineter > modules

    # Get module info
    termineter > use modules/read_table
    termineter > info

## Core Modules

    # Read basic meter info
    termineter > use modules/get_info
    termineter > run

    # Read meter tables
    termineter > use modules/read_table
    termineter > set TABLE_ID 1      # ANSI table ID
    termineter > run

Write to tables (destructive — use with caution)

    termineter > use modules/write_table

    # Enumerate all readable tables
    termineter > use modules/enum_tables
    termineter > run

    # Get configuration data
    termineter > use modules/get_configuration
    termineter > run

    # Test login bypass
    termineter > use modules/bruteforce_login
    termineter > run

## Connection Configuration

    # Set connection parameters
    termineter > set CONNECTION /dev/ttyUSB0
    termineter > set BAUD 9600
    termineter > set BYTE_SIZE 8
    termineter > set STOP_BITS 1
    termineter > set PARITY none

Connect

    termineter > connect

Show connection status

    termineter > show options

## Hardware Requirements

    # ANSI C12.18 optical probe (IR interface)
    # → Clamps onto meter display window
    # → Connects via USB serial adapter

    # Or direct serial connection (RS-232/RS-485)
    # → Some meters have exposed serial ports

    # Common probe: "Optical Probe" / "USB-Optical Probe ANSI C12.18"

## What You Can Extract

    # Table 0-127: Standard ANSI tables
    # Table 0: General configuration
    # Table 1: General manufacturer identification
    # Table 3: End device mode/status
    # Table 12: Units of measurement
    # Table 13: Demand control
    # Table 15: Constants
    # Table 20-27: Actual register data (consumption)
    # Table 62-64: Log entries (tamper history)

## Tips

- Physical access to the meter is required — IR/optical interface is on the front
- Some meters respond on multiple communication methods — try optical, then serial
- ANSI C12.18 is the local optical protocol; C12.22 is the network protocol (RF/cellular)
- Reading tables is generally safe; WRITING tables can affect billing or disable the meter
- Document all findings and get explicit permission before testing grid-connected meters

Help / Man page

    Termineter shell commands:

    connect          Connect to device
    disconnect       Disconnect
    use MODULE       Select module
    set KEY VALUE    Set option
    show options     Show current options
    run              Run selected module
    modules          List available modules
    info             Show module info
    help             Show help
    exit             Exit Termineter

## Vue d’ensemble

Termineter est un framework pour tester les smart meters et l’infrastructure AMI. Il communique via des interfaces optiques (IR) et série en utilisant les protocoles ANSI C12.18/C12.19/C12.22 pour énumérer, lire et écrire les tables des compteurs, ce qui permet aux chercheurs en sécurité d’évaluer les vulnérabilités des smart meters.

## Installation

    git clone https://github.com/rsmusllp/termineter
    cd termineter
    pip3 install -r requirements.txt
    python3 termineter

## Utilisation de base

    python3 termineter

    # Se connecter au compteur (sonde optique sur /dev/ttyUSB0)
    termineter > set CONNECTION /dev/ttyUSB0
    termineter > connect

    termineter > modules

    # Obtenir les infos du module
    termineter > use modules/read_table
    termineter > info

## Modules principaux

    # Lire les infos de base du compteur
    termineter > use modules/get_info
    termineter > run

    # Lire les tables du compteur
    termineter > use modules/read_table
    termineter > set TABLE_ID 1      # ID de table ANSI
    termineter > run

Écrire dans des tables (destructif : à utiliser avec prudence)

    termineter > use modules/write_table

    # Énumérer toutes les tables lisibles
    termineter > use modules/enum_tables
    termineter > run

    # Obtenir les données de configuration
    termineter > use modules/get_configuration
    termineter > run

    # Tester le contournement de login
    termineter > use modules/bruteforce_login
    termineter > run

## Configuration de la connexion

    # Définir les paramètres de connexion
    termineter > set CONNECTION /dev/ttyUSB0
    termineter > set BAUD 9600
    termineter > set BYTE_SIZE 8
    termineter > set STOP_BITS 1
    termineter > set PARITY none

    termineter > connect

Afficher le statut de la connexion

    termineter > show options

## Prérequis matériel

    # Sonde optique ANSI C12.18 (interface IR)
    # → Se fixe sur la fenêtre d'affichage du compteur
    # → Se connecte via un adaptateur série USB

    # Ou connexion série directe (RS-232/RS-485)
    # → Certains compteurs ont des ports série exposés

    # Sonde courante : "Optical Probe" / "USB-Optical Probe ANSI C12.18"

## Ce qui peut être extrait

    # Table 0-127 : tables ANSI standard
    # Table 0 : configuration générale
    # Table 1 : identification générale du fabricant
    # Table 3 : mode/statut du terminal
    # Table 12 : unités de mesure
    # Table 13 : contrôle de la demande
    # Table 15 : constantes
    # Table 20-27 : données de registre réelles (consommation)
    # Table 62-64 : entrées de journal (historique de sabotage)

## Conseils

- Un accès physique au compteur est requis : l’interface IR/optique se trouve sur la face avant
- Certains compteurs répondent sur plusieurs méthodes de communication : essayer d’abord l’optique, puis le série
- ANSI C12.18 est le protocole optique local ; C12.22 est le protocole réseau (RF/cellulaire)
- Lire les tables est généralement sûr ; ÉCRIRE dans les tables peut affecter la facturation ou désactiver le compteur
- Documenter toutes les découvertes et obtenir une autorisation explicite avant de tester des compteurs connectés au réseau électrique

Aide / Page de manuel

    Termineter shell commands:

    connect          Connect to device
    disconnect       Disconnect
    use MODULE       Select module
    set KEY VALUE    Set option
    show options     Show current options
    run              Run selected module
    modules          List available modules
    info             Show module info
    help             Show help
    exit             Exit Termineter