Skip to content

About

Autonomous network scanner for Raspberry Pi with web interface and central server

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

 

History

4 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Network Scanner

Автономная система инвентаризации и непрерывного мониторинга состояния сетевых узлов в локальной вычислительной сети.

Курсовой проект по дисциплине «Программно-аппаратные средства защиты информации» на базе 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

API эндпоинты

Публичные

Метод Путь Описание
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 Агрегированная статистика

Защищённые (X-API-Key)

Метод Путь Описание
GET /api/scan Запуск сканирования
GET /api/reports История отчётов
DELETE /api/reports Очистка истории

Центральный сервер (порт 9090)

Метод Путь Описание
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

About

Autonomous network scanner for Raspberry Pi with web interface and central server

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages