commit c7d2dfc9e4a0041ddd3518b0b3624581ea5f1f42 Author: bilal Date: Tue Apr 21 00:39:52 2026 +0300 Загрузить файлы в «/» diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..caec508 --- /dev/null +++ b/Dockerfile @@ -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"] diff --git a/README.md b/README.md new file mode 100644 index 0000000..da141ad --- /dev/null +++ b/README.md @@ -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 \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..ed88a48 --- /dev/null +++ b/docker-compose.yml @@ -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 diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..f616a73 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,4 @@ +scapy==2.5.0 +qdrant-client==1.7.0 +requests==2.31.0 +numpy diff --git a/vector_store.py b/vector_store.py new file mode 100644 index 0000000..9699984 --- /dev/null +++ b/vector_store.py @@ -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 + )