Автономная система инвентаризации и непрерывного мониторинга состояния сетевых узлов в локальной вычислительной сети.
Курсовой проект по дисциплине «Программно-аппаратные средства защиты информации» на базе Raspberry Pi + Go + Nmap.
Программно-аппаратное средство для аудита локальной сети. Устройство сканирует сеть, выявляет подключённые узлы, определяет открытые порты и сервисы, оценивает риск безопасности и отслеживает изменения во времени. Работает автономно без ПК, показывает статус на встроенном LCD-экране, предоставляет веб-интерфейс и отправляет отчёты на центральный сервер.
- 🔍 Инвентаризация — обнаружение устройств в ЛВС через Nmap
- 🌐 Определение сервисов — открытые порты и названия служб
- 🚦 Оценка риска — Низкий / Средний / Высокий (эвристика по портам)
- 📊 Мониторинг изменений — новые и ушедшие устройства, открывшиеся и закрывшиеся порты
- 🗄️ PostgreSQL — постоянное хранение сканов, отчётов и событий
- 🌐 Веб-интерфейс — дашборд с автообновлением (порт 8080)
- 📱 QR-код — быстрый доступ с телефона
- 🔎 Поиск и фильтры — по IP, имени, риску
- 📥 Экспорт CSV — отчёт для анализа
- 📈 История сканирований — из базы данных
- 🖥️ LCD-экран — статус, IP, температура, RAM
- 📡 Клиент-сервер — отправка отчётов на центральный сервер (порт 9090)
- ⏰ Автосканирование — каждые 10 минут
- 🔐 API-ключ — защита критичных эндпоинтов
- 🚀 systemd-сервисы — автозапуск при включении
- Go 1.21+ — backend, REST API, конкурентность (goroutines)
- Nmap — сканирование портов и сервисов
- PostgreSQL 15 — постоянное хранение данных
- pgx/v5 — драйвер PostgreSQL для Go
go:embed— встраивание статики в бинарник- systemd — автозапуск сервисов
- Raspberry Pi OS (Bookworm) — операционная система
- HTML/CSS/JS — веб-интерфейс
- Bash — скрипты отображения на LCD
| Метод | Путь | Описание |
|---|---|---|
| GET | / |
Веб-интерфейс |
| GET | /api/health |
Health check |
| GET | /api/version |
Версия сервиса |
| GET | /api/results |
Текущие результаты сканирования |
| GET | /api/system |
Системная информация |
| GET | /api/qr |
QR-код PNG |
| GET | /api/export.csv |
Экспорт отчёта в CSV |
| GET | /api/device/{ip} |
Устройство по IP |
| GET | /api/devices?risk=high&has_ports=true |
Фильтрация устройств |
| GET | /api/stats |
Агрегированная статистика |
| Метод | Путь | Описание |
|---|---|---|
| GET | /api/scan |
Запуск сканирования |
| GET | /api/reports |
История отчётов |
| DELETE | /api/reports |
Очистка истории |
| Метод | Путь | Описание |
|---|---|---|
| GET | / |
Веб-интерфейс сервера |
| POST | /api/report |
Приём отчёта от агента |
| GET | /api/reports |
Все отчёты |
| GET | /api/latest |
Последний отчёт |
- Raspberry Pi 3 Model B (или новее)
- Raspberry Pi OS Bookworm (Legacy, 32-bit)
- Go 1.21+
- Nmap
- qrencode
# Клонировать репозиторий
git clone https://github.com/USERNAME/network-scanner.git
cd network-scanner
# Собрать веб-сервер
cd web
go build -o scanner-web server.go
# Собрать центральный сервер
cd ../server
go build -o scanner-server server.go
# Запустить через systemd
sudo cp ../systemd/*.service /etc/systemd/system/
sudo systemctl daemon-reload
sudo systemctl enable --now scanner-web scanner-server
#Проверка
# Health check
curl http://localhost:8080/api/health
# Запустить сканирование (с API-ключом)
curl -H "X-API-Key: scanner-secret-key-2026" http://localhost:8080/api/scan
#Тесты
cd web go test -v
## Безопасность
- **API-ключ** вынесен в переменную окружения `SCANNER_API_KEY` (fallback: `dev-key-change-me`).
- **Целевая подсеть** настраивается через `SCANNER_SUBNET` (по умолчанию `192.168.0.0/24`).
- Защищённые эндпоинты: `/api/scan`, `/api/reports` — требуют заголовок `X-API-Key`.
- Устройство предназначено для **авторизованного аудита** собственных сетей.
- Применение в чужих сетях без разрешения запрещено (ст. 272 УК РФ).
### Настройка через systemd
```ini
[Service]
Environment="SCANNER_API_KEY=your-secret-key-here"
Environment="SCANNER_SUBNET=192.168.0.0/24"
# API-ключ для защиты эндпоинтов /api/scan и /api/reports
SCANNER_API_KEY=change-me-to-secret-key
# Целевая подсеть для сканирования
SCANNER_SUBNET=192.168.0.0/24