Files
2026-07-27 15:24:01 +02:00

76 lines
5.8 KiB
Markdown

# Distributed Network Event Detection System
An alpha, graph-based Python network-intrusion-detection prototype. Its real-time components consume packet messages from Kafka, build and merge network graph state in Redis, dispatch node-analysis work, run model-based analysis, and print node results.
## Status and non-reproducible limitations
> **Not an end-to-end runnable deployment as checked out.** No packet producer/input-capture process or tested worker orchestration is provided. The included workers wait for messages on Kafka topics; starting them alone does not capture traffic.
- The package metadata is alpha and only classifies Python 3.11. Its `readme = "README.md"` refers to a README missing from `graph_based_intrusion_detection/`, which may prevent standard package build metadata generation.
- Node analysis loads models and scalers from hard-coded absolute paths outside this repository. Although similarly named model files exist under `resources/models/`, the configured paths do not point there. Update the configuration for an environment before starting the node analyzer.
- Kafka and Redis addresses are hard-coded as `localhost:9092` and `localhost:6379` in the workers.
- The local Compose stack uses unpinned `latest` container images and is not a reproducible production deployment.
- No test suite, project test command, console entry point, or application deployment definition is present.
Do not use this prototype as a production intrusion-detection control without supplying and validating the missing capture, model-path, orchestration, retention, and security configuration.
## Components and data flow
The real-time code uses these Kafka topics and Redis state:
1. `packet_processor` consumes `packets`, builds processed graph state, and publishes `processed_states`.
2. `state_merger` consumes `processed_states` and stores merged network state in Redis.
3. `work_dispatcher` reads network state, tracks nodes in Redis, sends work to `node_analysis`, and consumes `node_analysis_results`.
4. `node_analyzer` consumes node-analysis work, loads configured models/scalers, and publishes results.
5. `network_state_visualizer` reads the node registry from Redis and prints it to the terminal.
This describes the implemented connections, not a validated deployment order or a complete ingestion pipeline.
## Prerequisites and setup status
The nested package at `graph_based_intrusion_detection/` declares dependencies including Keras, TensorFlow, Kafka Python, Redis, NetworkX, NumPy, pandas, SciPy, scikit-learn, tqdm, and python-dotenv. Its package metadata identifies Python 3.11.
A standard package installation cannot be documented as reproducible until the missing nested README referenced by `pyproject.toml` is resolved. After package dependencies and metadata have been made installable, run the worker modules from `graph_based_intrusion_detection/` as shown below. No dependency lockfile is provided.
Before starting `node_analyzer`, make the configured model and scaler paths in `src/graph_based_intrusion_detection/utils/config.py` valid for the runtime. Set `LOG_FILE_PATH` and `LOG_LEVEL` before starting workers; for example: `export LOG_FILE_PATH=/tmp/network-event-detection.log` and `export LOG_LEVEL=INFO`. No environment-based broker or Redis configuration is implemented.
## Local infrastructure
From the nested package directory, start the provided local Kafka/Redis dependencies:
```bash
cd graph_based_intrusion_detection/deployment/kafka
docker compose up
```
This starts ZooKeeper, Kafka, and Redis and publishes Kafka on host port `9092` and Redis on host port `6379`. It is local development infrastructure only; the Compose file has no authentication, persistent-volume, image-pinning, or application-worker service configuration. Keep Kafka, Redis, and every message producer isolated to a trusted network: workers unpickle message content and must never consume messages from untrusted publishers.
## Worker commands
After dependencies are installed, models are configured, and Kafka/Redis are running locally, each worker has a direct Python module entry point. Run these from `graph_based_intrusion_detection/`; an optional trailing worker ID is accepted.
```bash
python -m graph_based_intrusion_detection.realtime_event_detection.packet_processor [worker-id]
python -m graph_based_intrusion_detection.realtime_event_detection.state_merger [worker-id]
python -m graph_based_intrusion_detection.realtime_event_detection.work_dispatcher [worker-id]
python -m graph_based_intrusion_detection.realtime_event_detection.node_analyzer [worker-id]
python -m graph_based_intrusion_detection.realtime_event_detection.network_state_visualizer [worker-id]
```
These are long-running workers. The repository does not establish a safe startup order, supervision model, shutdown procedure, health check, packet producer, or end-to-end validation command.
## Development and testing
No tests or test runner are present. The notebooks under `notebooks/` are exploratory artifacts rather than a documented operational workflow. There are no lint, format, build, or deployment scripts in the package metadata.
## Repository layout
- `graph_based_intrusion_detection/src/graph_based_intrusion_detection/` — package source
- `realtime_event_detection/` — Kafka/Redis workers
- `packet_processing/`, `graph_processing/`, `analysis/` — graph construction and model analysis
- `utils/config.py` and `utils/constants.py` — hard-coded model paths, topics, ports, and runtime constants
- `graph_based_intrusion_detection/deployment/kafka/docker-compose.yml` — local ZooKeeper, Kafka, and Redis stack
- `graph_based_intrusion_detection/resources/models/` — checked-in model/scaler artifacts (not the paths currently configured for node analysis)
- `graph_based_intrusion_detection/notebooks/` — exploratory notebooks
- `infosheet.md` — capture/device notes, not operating documentation