Suricata ASTERIX Parser Plugin

Application-layer parser plugin for Suricata that decodes ASTERIX (All-purpose STructured EUROCONTROL Surveillance Information EXchange) binary protocol used for air traffic surveillance data.

What It Parses

ASTERIX is the standard protocol for exchanging surveillance data in air traffic management (ATM) systems. It is used by:

The plugin parses:

EVE JSON Output

{
  "timestamp": "2026-04-25T10:00:00.000000+0000",
  "event_type": "asterix",
  "src_ip": "10.0.5.1",
  "dest_ip": "10.0.5.100",
  "src_port": 8600,
  "dest_port": 8601,
  "proto": "UDP",
  "asterix": {
    "category": 48,
    "category_name": "Monoradar Target Reports (Enhanced)",
    "record_count": 1,
    "track_number": 1234,
    "icao_address": "A1B2C3",
    "callsign": "UAL123",
    "squawk_code": "7700",
    "altitude": 35000,
    "time_of_day": 43200.5
  }
}

Building

# With Suricata source tree
SURICATA_SRC=/path/to/suricata make

# Run Rust unit tests (no Suricata dependency)
make test

Architecture

src/
├── lib.rs       # Suricata FFI bridge (C-extern callbacks)
├── asterix.rs   # Pure Rust ASTERIX wire protocol parser
├── state.rs     # Per-flow state and transaction management
└── logger.rs    # EVE JSON generation

plugin.c         # Suricata plugin entry point (SCPluginRegister)
applayer.c       # App-layer registration and callback routing
asterix-plugin.h # C header for plugin metadata
Makefile         # Build orchestration

Security Use Cases

Air Traffic Monitoring

Critical Infrastructure

License

GPL-2.0-only (matching Suricata’s license)