Загрузить файлы в «/»
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