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/termineterOverview
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