Получайте из любого источника, безопасно.
Скоро
Отправьте ссылку или вызовите API. Corvidint определяет источник, составляет карту каждого файла и получает то, что выбирает ваша политика, с проверкой и записью.
Источники
- Прямые ссылкиhttps://archive.example.org/…
- Веб-листингиIndex of /pub/2026/
- Onion-сервисы….onion
- P2P-раздачиmagnet:?xt=urn:btih:…
Опубликовано, сначала новые
- attachments/samples.zip1,4 GiBПроверена контрольная сумма источника
- attachments/bulletins/bulletin-2026-07.pdf16,9 MiBКонтрольная сумма вычислена при получении
- captures/listing-0001.html428 KiBКонтрольная сумма вычислена при получении
- attachments/indicators-0417.json2,3 MiBПроверено протоколом передачи
- screens/page-0001.png717 KiBКонтрольная сумма вычислена при получении
- attachments/bulletins/bulletin-2026-06.pdf14,2 MiBПроверена контрольная сумма источника
- shared/case-0417/notes.txt6,2 KiBПроверена контрольная сумма источника
Всё, к чему может привести ссылка.
Один универсальный конвейер определяет любой источник, известный или нет. Стандарты, проверенные рецепты и версионируемые коннекторы расширяют его без нового кода в ядре.
Только источники, сбор из которых вам разрешён. Отсутствие доступа становится запросом на действие, а не поводом искать обход.
Прямые ссылки
Доступ черезVPN-туннелиПул Tor
Прямые, общие и временные ссылки, редиректы и промежуточные страницы между ними.
- https://
- http://
- 302 Found
- ?expires=…
Веб-листинги
Доступ черезVPN-туннелиПул Tor
Индексы серверов, каталоги, таблицы, страницы с описанием, галереи, фиды и JSON-листинги с постраничной разбивкой.
- Index of /
- ?page=2
- <enclosure>
- next_cursor
Файловые серверы
Доступ черезVPN-туннели
FTP и FTPS, SFTP с закреплёнными ключами хоста и коллекции WebDAV, папка за папкой.
- ftp://
- ftps://
- sftp://
- PROPFIND
Облачные хранилища
Доступ черезVPN-туннели
Настроенные удалённые хранилища и общие папки, которые перечисляются через их собственные интерфейсы.
- remote:bucket/
- /shared/
- next_page_token
Файлообменники
Доступ черезVPN-туннели
Хостинговые сервисы со своими форматами ссылок, которые обрабатывают специальные адаптеры и изолированные движки.
- /file/…
- /folder/…
- #key
Динамические страницы
Доступ черезVPN-туннелиПул Tor
Ссылки, которые строит только скрипт, находит браузер в песочнице, в жёстких пределах ресурсов.
- <script>
- fetch()
- subresources
Onion-сервисы
Доступ черезПул Tor
Onion-адреса идут только в изолированный пул Tor и никогда не обращаются к обычному DNS.
- .onion
- client auth
P2P-раздачи
Доступ черезP2P-сессии
Magnet-ссылки и torrent-файлы работают в собственных туннелируемых сессиях, никогда через Tor, и без последующей раздачи.
- magnet:?xt=
- .torrent
- info-hash
Архивы и наборы
Доступ черезЛюбая сеть
Архивы перечисляются элемент за элементом, а части многотомного набора выбираются как одно целое.
- .zip
- .tar.gz
- .7z
- .rar
- .iso
- .part1
Авторизованный доступ
Доступ черезVPN-туннелиПул Tor
Пароли, токены, ключи и клиентские ключи onion отправляются один раз, хранятся как ссылки и больше не показываются.
- username_password
- token
- ssh_key
- onion_client_auth
Одна ссылка превращается в полную опись.
Определение сначала собирает доказательства и лишь потом чему-то верит. Размер остаётся неизвестным, пока не доказан, а список считается полным только когда закрыты все ветви.
- archive.example.org/
collections/ коллекция0417/ - attachments/
83 файла1,9 GiB - bulletins/
79 файлов282 MiB - indicators-0417.jsonданные2,3 MiB
- samples-part2.7zархивразмер неизвестен286 MiB
- samples.zipархив1,4 GiB
- readme.txtэлемент архива
- docs/
overview.pdf элемент архива - ещё 10 элементов
- unknown-0042.binнеизвестный тип3,1 MiB
- captures/
148 файлов46,1 MiB - index.htmlпромежуточная страница48,0 KiB
- README.txtтекст2,1 KiB
- screens/
64 файла41,1 MiB - video/
2 файла1,5 GiB - recording-02.mp4видео1,1 GiB
- walkthrough.mp4видео412 MiB
- ПроверитьСхема, порт и класс хоста проверяются без обращения к источнику.
- Выбрать сетьOnion-имя выбирает пул Tor, любое другое имя выбирает VPN-туннель.
- Собрать доказательстваЗаголовки, сигнатуры, списки и чтение диапазонов, сначала самое дешёвое.
- КлассифицироватьФайл, папка, коллекция или промежуточная страница, у каждого свои доказательства.
- ПеречислитьПапки постранично, архивы элемент за элементом, циклы обрываются.
- Закрыть списокПолным в заданных границах список считается, только когда не осталось открытых ветвей.
{"location_id": "loc_01JAH8K2","name": "samples.zip","depth": 1,"has_children": false,"listing_complete": true,"resource": {"resource_id": "res_01JAH8K2","kind": "file","kind_status": "confirmed","discovery_state": "resolved","size": {"bytes": "1481763717","status": "validated","basis": "representation"},"media": {"category": "archive","identification_status": "confirmed","detected_media_type": "application/zip"}}}Новые сайты без нового кода
Стандартным протоколам нужна только конфигурация. Для известных вёрсток есть декларативные рецепты. Для новых протоколов есть версионируемый коннектор, но не правка ядра.
- СтандартыВеб-листинги, FTP, SFTP, WebDAV и удалённые хранилища поддерживаются из коробки.
- РецептыПолучить, выбрать, извлечь, выдать. Без скриптов и кода, только операции, которые разрешает платформа.
- КоннекторыВерсионируемые пакеты, которые работают вне процесса и сначала проходят набор проверки соответствия.
Как рецепт заслуживает своё место
- Предложен
- Проверен на фикстурах
- Канарейка на части задач
- Повышен по доказательствам
- Отозван при дрейфе
Модель может предложить шаги рецепта. Его проверяют люди, а повышают только доказательства.
{"recipe_key": "archive-listing.paged","version": 3,"language_version": "1.0","scope": {"hosts": ["archive.example.org"],"path_patterns": ["/collections/*"]},"steps": [{"op": "fetch","target": "input_url","accept": "html"},{"op": "select","language": "css","expression": "table.listing a.file","as": "links"},{"op": "extract","from": "links","attribute": "href","as": "hrefs"},{"op": "emit","kind": "unknown","native_id_from": "hrefs","relation": "contains"}],"expected_evidence": {"exhaustiveness": "provider_declared"}}Вымышленные значения, имена полей ровно такие, как их определяет API
Ничего не скачивается, пока порядок не доказан.
Правила решают, что разрешено, исключено или отправлено в карантин. Строгий выбор ждёт закрытого списка и известных размеров, затем ранжирует каждый файл по размеру.
Правила политики, сначала самый высокий приоритет
- 1exclude-videoВоспроизводимое видео исключается.
- 2inspect-unknownНеизвестные типы проверяются, а неопределённый результат ведёт в карантин.
- 3opaque_
encrypted_ Зашифрованные архивы остаются закрытыми, пока кто-то не введёт пароль.when_ acquired - 4default_
action Всё остальное разрешено.
Записано вместе с выбором
strict_order_closed_inventory
Каждый файл полной описи упорядочен по размеру до загрузки.
Режимы выбора
- 1Все файлы, сначала самые большие
- 2Самый большой файл
- 3Самый большой файл каждой папки
- 4Файлы в диапазоне размеров
Строгий режим ждёт закрытого списка и известных размеров. Прогрессивный режим стартует раньше и сообщает об этом.
{"candidate_id": "rep_0008D","display_name": "walkthrough.mp4","candidate_kind": "representation","selection_revision": 2,"action": "exclude","rule_id": "exclude-video","reason_codes": ["video_excluded"],"evidence": [{"mechanism": "format_header","attribute": "kind","status": "confirmed","summary": "video/mp4"}]}Каждый запрос уходит через туннель.
Зонды, листинги и передачи одинаково используют разрешённый исходящий канал. Когда туннель падает, запросы останавливаются: прямого маршрута, на который можно откатиться, нет.
Каждый запрос проходит через шлюз политик и уходит по каналу, которого требует его источник.
Onion-трафик идёт по многослойным цепочкам Tor в собственном изолированном пуле.
К раздачам подключаются из собственных P2P-сессий. Части приходят, а раздача потом не ведётся.
Туннель упал. Новые запросы останавливаются, передачи сохраняют контрольные точки, и ничего не уходит напрямую.
Туннель восстановлен. Передачи продолжаются с контрольных точек.
- Приватные адреса, loopback и адреса метаданных отклоняются в момент подключения.
- Onion-имена никогда не обращаются к обычному DNS.
- P2P-сессии прекращают раздачу, как только запрошенные файлы получены целиком.
- Отозванная привязка закрывает действующие соединения, и шлюз это подтверждает.
- Если остановку нельзя подтвердить, её ресурс остаётся занятым, пока она не подтверждена.
- Незавершённые части хранятся в объектном хранилище, поэтому другой модуль может их продолжить.
Проверено, записано, никогда не запускается.
Независимый верификатор хэширует каждый подготовленный файл. Байты хранятся по содержимому, публикуются один раз и отдаются только как вложения.
Несовпадение отправляется в карантин и получается заново, но никогда не публикуется.
Два расположения, один blob
Одинаковые байты хранятся один раз по их SHA-256. Каждое расположение, которое на них указывало, сохраняется.
Хранится как доказательство, никогда не запускается
- Ничто полученное не открывается, не запускается, не устанавливается и не монтируется.
- Анализаторы работают без сети, от отдельного пользователя, с ограничениями по времени и памяти.
- Пути в архивах проверяются до извлечения хотя бы одного элемента.
- Файлы уходят только как вложения, по недолговечным ссылкам с отдельного origin.
{"file_id": "file_0008","logical_path": "attachments/samples.zip","stored_name": "21d80013bfc9266b","size_bytes": "1481763717","sha256": "21d80013bfc9266bc453a3db98d1f3d14a2be4483d5020d74ec194a763336753","integrity_level": "origin_checksum_verified","origin_checksum": {"algorithm": "sha256","value": "21d80013bfc9266bc453a3db98d1f3d14a2be4483d5020d74ec194a763336753"},"source_resource_id": "res_01JAH8K2","published_at": "2026-10-05T08:31:00Z"}Вымышленные значения, имена полей ровно такие, как их определяет API
Создан для вызова, готов к передаче парсеру.
Любой проект отправляет задания через API и следит за ними по событиям. Парсер принимает каждый опубликованный файл вместе с его контрольной суммой и происхождением.
- Ваш проект
- Загрузчик
- Парсер
- Ваш проектЗагрузчикОтправляет заданиеЗадание с ключом идемпотентности: повтор никогда не создаёт второе задание.
Задание, которое отправляет ваш проект {"sources": [{"url": "https://archive.example.org/collections/0417/"},{"url": "https://share.example.net/s/K7q2xWm9"}],"policy_profile": "evidence-default","destination_id": "evidence-store","client_reference": "Archive capture, case 0417"} - ЗагрузчикВаш проектПринимает после сохраненияОтвет приходит только после сохранения задания и его политики.
Что приходит в ответ {"job_id": "job_01JAH7Q2M4K8V3","policy_revision": "prv_4","accepted_at": "2026-10-05T08:12:04Z","idempotent_replay": false} - ЗагрузчикПарсерОбъявляет об опубликованном файлеПодписанные вебхуки или события, которые вы опрашиваете или читаете потоком от курсора.
Событие, которое получает парсер {"event_id": "0f6e2a90-41d7-4c0b-9e5a-000000000010","event_type": "file.published","schema_version": "1.0","occurred_at": "2026-10-05T08:31:12Z","job_id": "job_01JAH7Q2M4K8V3","aggregate_type": "file","aggregate_id": "file_0008","aggregate_version": 3,"stream_seq": "10","data": {"file_id": "file_0008","logical_path": "attachments/samples.zip","size_bytes": "1481763717","verification_level": "origin_checksum_verified","selection_revision": 2}} - ПарсерЗагрузчикЧитает запись файлаПарсер проверяет, что файл зафиксирован, и читает его SHA-256.
Запись файла, которую проверяет парсер {"file_id": "file_0008","job_id": "job_01JAH7Q2M4K8V3","logical_path": "attachments/samples.zip","original_name": "samples.zip","size_bytes": "1481763717","sha256": "21d80013bfc9266bc453a3db98d1f3d14a2be4483d5020d74ec194a763336753","integrity_level": "origin_checksum_verified","state": "committed","detected_media_type": "application/zip"} - ПарсерЗагрузчикПолучает по недолговечной ссылкеНедолговечная ссылка; перед разбором парсер снова хэширует байты.
Опись, манифест и решения также экспортируются в NDJSON.
Вымышленные значения, имена полей ровно такие, как их определяет API
Увидьте это на своих источниках.
Расскажите, что вам нужно. Мы покажем живой снимок, от поста до опечатанной записи.
Удобнее почта? Напишите на [email protected].