# Парсинг и анализ IOC

Материал описывает правила извлечения индикаторов компрометации из текстов, нормализацию значений и подготовку данных к обработке провайдерами.

## Определение шаблонов

- Шаблоны формируются через `PatternDefinition` и охватывают домены, URL, IPv4/IPv6 и хэши распространённых алгоритмов.
- Для каждого шаблона задаются имя, функция нормализации и конструктор типизированного индикатора.
- Перекрывающиеся совпадения исключаются с помощью структуры `ConsumedRanges`, чтобы избежать дублирования результатов.

## Нормализация доменов

- Входные значения очищаются от обфускации точек, приводятся к форме NFC и сравниваются со справочником TLD из `lists/tlds.txt`.
- Допустимые домены переводятся в punycode; значения вне разрешённых зон или с ошибками формата отбрасываются до выдачи ответа.

## Формирование результатов

- Найденные индикаторы группируются по категориям (`domain`, `url`, `ipv4`, `ipv6`, типы хэшей) и передаются в очередь без дубликатов.
- Для каждого совпадения сохраняются позиции в исходном тексте, тип обнаруженного значения и исходный шаблон, что облегчает диагностику.

## Анализ индикаторов

- Модуль `iocs.analysis` и функция `analysis.run_indicator_analysis` вычисляют базовые вердикты и фичи по умолчанию, если провайдеры не предоставили данные.
- Результаты анализа объединяются с ответами внешних сервисов и передаются в сервисный слой для формирования итогового статуса задачи.
