Загрузить файлы в «/»
This commit is contained in:
22
Dockerfile
Normal file
22
Dockerfile
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
FROM python:3.10-slim
|
||||||
|
|
||||||
|
# Устанавливаем зависимости для scapy (libpcap)
|
||||||
|
RUN apt-get update && apt-get install -y \
|
||||||
|
libpcap-dev \
|
||||||
|
gcc \
|
||||||
|
&& rm -rf /var/lib/apt/lists/*
|
||||||
|
|
||||||
|
WORKDIR /app
|
||||||
|
|
||||||
|
# Копируем и устанавливаем зависимости
|
||||||
|
COPY requirements.txt .
|
||||||
|
RUN pip install --no-cache-dir -r requirements.txt
|
||||||
|
|
||||||
|
# Копируем исходный код
|
||||||
|
COPY src/ ./src/
|
||||||
|
|
||||||
|
# Открываем порт для netcat (хотя мы будем использовать stdin через docker exec)
|
||||||
|
EXPOSE 1234
|
||||||
|
|
||||||
|
# Запуск анализатора
|
||||||
|
ENTRYPOINT ["python", "src/main.py"]
|
||||||
64
README.md
Normal file
64
README.md
Normal file
@@ -0,0 +1,64 @@
|
|||||||
|
# Wi-Fi Traffic Analyzer
|
||||||
|
|
||||||
|
## Описание
|
||||||
|
Приложение для анализа трафика Wi-Fi с использованием машинного обучения и векторных баз данных. Проект позволяет обнаруживать аномалии и потенциальные уязвимости в беспроводных сетях.
|
||||||
|
|
||||||
|
## Состав
|
||||||
|
- `src/parser.py` - Парсинг пакетов Wi-Fi
|
||||||
|
- `src/embedder.py` - Генерация векторных представлений с использованием Ollama
|
||||||
|
- `src/vector_store.py` - Хранение и поиск векторов в Qdrant
|
||||||
|
- `src/ai_analyser.py` - Анализ аномалий с помощью AI
|
||||||
|
- `src/main.py` - Основной модуль анализа
|
||||||
|
|
||||||
|
## Особенности
|
||||||
|
- Анализ трафика в реальном времени
|
||||||
|
- Обнаружение аномалий с использованием векторных баз данных
|
||||||
|
- Интеграция с Ollama для генерации векторных представлений
|
||||||
|
- Интеграция с Qdrant для хранения и поиска векторов
|
||||||
|
- Поддержка переменных окружения для конфигурации внешних сервисов
|
||||||
|
|
||||||
|
## Запуск
|
||||||
|
1. Установите Docker и Docker Compose
|
||||||
|
2. Настройте переменные окружения в `docker-compose.yml`:
|
||||||
|
- `QDRANT_HOST` - IP-адрес вашего Qdrant
|
||||||
|
- `QDRANT_PORT` - Порт Qdrant (по умолчанию 6333)
|
||||||
|
- `OLLAMA_URL` - URL сервиса Ollama (по умолчанию http://localhost:11434)
|
||||||
|
3. Запустите контейнер:
|
||||||
|
```bash
|
||||||
|
docker-compose up -d
|
||||||
|
```
|
||||||
|
|
||||||
|
4. Для отправки трафика с устройства Ubiquiti:
|
||||||
|
```bash
|
||||||
|
tcpdump -i ath0 -y ieee802_11_radio -w - | nc 127.0.0.1 9999
|
||||||
|
```
|
||||||
|
|
||||||
|
5. Для просмотра логов:
|
||||||
|
```bash
|
||||||
|
docker logs -f analyzer
|
||||||
|
```
|
||||||
|
|
||||||
|
6. Для остановки контейнера:
|
||||||
|
```bash
|
||||||
|
docker-compose down
|
||||||
|
```
|
||||||
|
|
||||||
|
## Настройка переменных окружения
|
||||||
|
Все переменные окружения можно настроить в `docker-compose.yml`:
|
||||||
|
- `QDRANT_HOST` - IP-адрес сервера Qdrant
|
||||||
|
- `QDRANT_PORT` - Порт сервера Qdrant
|
||||||
|
- `OLLAMA_URL` - URL сервиса Ollama для генерации эмбеддингов
|
||||||
|
|
||||||
|
## Требования
|
||||||
|
- Docker и Docker Compose
|
||||||
|
- Система с поддержкой контейнеров
|
||||||
|
- Подключение к Qdrant и Ollama сервисам
|
||||||
|
|
||||||
|
## Поддерживаемые атаки
|
||||||
|
- Deauthentication Flood (уязвимость 802.11w)
|
||||||
|
- Rogue AP / Evil Twin (несоответствие RSSI/MAC)
|
||||||
|
- WPA Handshake sniffing (EAPOL flow)
|
||||||
|
- WPS Pixie Dust / Brute Force
|
||||||
|
|
||||||
|
## Лицензия
|
||||||
|
MIT
|
||||||
14
docker-compose.yml
Normal file
14
docker-compose.yml
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
version: '3.8'
|
||||||
|
|
||||||
|
services:
|
||||||
|
analyzer:
|
||||||
|
build: .
|
||||||
|
ports:
|
||||||
|
- "9999:9999" # Порт для приема дампа трафика
|
||||||
|
environment:
|
||||||
|
- QDRANT_HOST=192.168.1.70 # Укажите IP вашего внешнего Qdrant
|
||||||
|
- QDRANT_PORT=6333
|
||||||
|
- OLLAMA_URL=http://192.168.1.70:11434
|
||||||
|
extra_hosts:
|
||||||
|
- "host.docker.internal:host-gateway"
|
||||||
|
restart: unless-stopped
|
||||||
4
requirements.txt
Normal file
4
requirements.txt
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
scapy==2.5.0
|
||||||
|
qdrant-client==1.7.0
|
||||||
|
requests==2.31.0
|
||||||
|
numpy
|
||||||
36
vector_store.py
Normal file
36
vector_store.py
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
import os
|
||||||
|
from qdrant_client import QdrantClient
|
||||||
|
from qdrant_client.models import Distance, VectorParams, PointStruct
|
||||||
|
|
||||||
|
class VectorDB:
|
||||||
|
def __init__(self, collection_name="wifi_lab", vector_size=4096):
|
||||||
|
host = os.getenv("QDRANT_HOST", "localhost")
|
||||||
|
port = int(os.getenv("QDRANT_PORT", 6333))
|
||||||
|
self.client = QdrantClient(host=host, port=port)
|
||||||
|
self.collection_name = collection_name
|
||||||
|
|
||||||
|
# Создаем коллекцию, если её нет (размерность 4096 для Qwen 8B Embedding)
|
||||||
|
self.client.recreate_collection(
|
||||||
|
collection_name=self.collection_name,
|
||||||
|
vectors_config=VectorParams(size=vector_size, distance=Distance.COSINE),
|
||||||
|
)
|
||||||
|
|
||||||
|
def add_packet(self, pkt_id, vector, metadata, text):
|
||||||
|
self.client.upsert(
|
||||||
|
collection_name=self.collection_name,
|
||||||
|
points=[
|
||||||
|
PointStruct(
|
||||||
|
id=pkt_id,
|
||||||
|
vector=vector,
|
||||||
|
payload={"metadata": metadata, "text": text}
|
||||||
|
)
|
||||||
|
]
|
||||||
|
)
|
||||||
|
|
||||||
|
def find_similar(self, vector):
|
||||||
|
return self.client.search(
|
||||||
|
collection_name=self.collection_name,
|
||||||
|
query_vector=vector,
|
||||||
|
limit=3,
|
||||||
|
with_payload=True
|
||||||
|
)
|
||||||
Reference in New Issue
Block a user