Как настроить HTTP-соединение из 1С к сайту в сети TOR (.onion)?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

При работе с внешними сервисами иногда возникает необходимость интеграции с ресурсами, расположенными в защищенной сети Tor (доменная зона .onion). Типичная ситуация: разработчик запускает службу tor.exe, настраивает ИнтернетПрокси в 1С, указывает SOCKS5, но при попытке выполнить запрос получает досадную ошибку: «Ошибка работы с Интернет: Couldn't resolve host name». Давайте вместе разберем, почему штатные механизмы 1С ведут себя именно так, и как реализовать стабильное соединение.

Анализируем причину ошибки разрешения имени

Основная проблема кроется не в коде 1С как таковом, а в том, как платформа взаимодействует с сетевыми библиотеками операционной системы. Разберем этот механизм подробнее. Существует два способа работы с SOCKS5-прокси:

  1. SOCKS5 (Local DNS): Приложение сначала пытается самостоятельно узнать IP-адрес узла через системную службу DNS и только потом передает этот IP-адрес прокси-серверу. Поскольку обычные DNS-серверы провайдеров ничего не знают о зоне .onion, разрешение имени (resolve) завершается ошибкой еще до того, как запрос уйдет в сторону Tor.
  2. SOCKS5h (Remote DNS): Приложение передает прокси-серверу не IP-адрес, а доменное имя в чистом виде. Прокси-сервер сам берет на себя задачу разрешения этого имени. Именно этот режим критически важен для работы с .onion сайтами.

В платформе 1С объект ИнтернетПрокси при указании протокола socks5 зачастую работает в первом режиме. Более того, на ОС Windows 1С использует системную библиотеку WinHTTP, которая имеет ограниченную поддержку удаленного DNS через SOCKS. В результате мы видим ошибку Couldn't resolve host name, так как система пытается найти .onion в обычном интернете.

Способ №1: Использование Privoxy как «переводчика» (Рекомендуемый)

Рассмотрим наиболее надежный архитектурный подход. Чтобы 1С могла «общаться» с Tor, мы добавим промежуточное звено — Privoxy. Это неинвазивный метод, который позволяет 1С использовать привычный HTTP-протокол для проксирования, делегируя сложные задачи преобразования в SOCKS5h специализированному софту.

Разберем процесс настройки по шагам:

  1. Установите и запустите tor.exe (по умолчанию порт 9050).
  2. Установите Privoxy. Это бесплатный веб-прокси с открытым исходным кодом.
  3. В файле конфигурации Privoxy (обычно config.txt) найдите и добавьте следующую строку:

    forward-socks5t / 127.0.0.1:9050 .

    Важно: точка в конце строки обязательна, она означает «для всех доменов».
  4. Теперь Privoxy слушает порт 8118 и перенаправляет все входящие HTTP-запросы в сеть Tor через SOCKS5 с поддержкой удаленного DNS.

Теперь проанализируем, как изменится наш код в 1С. Мы будем обращаться к Privoxy как к обычному HTTP-прокси:


ПроксиИнт = Новый ИнтернетПрокси();
// Указываем адрес и порт Privoxy (по умолчанию 8118)
ПроксиИнт.Установить("http", "127.0.0.1", 8118);
ПроксиИнт.Установить("https", "127.0.0.1", 8118);

// Теперь создаем соединение. DNS-имя будет передано в Privoxy без изменений
Соединение = Новый HTTPСоединение("meduzazoo2tfkzlc.onion",
    80, , , 
    ПроксиИнт,
    30); // Увеличим таймаут, так как сеть Tor работает медленнее

Запрос = Новый HTTPЗапрос("/exchanger/balance");
Ответ = Соединение.Получить(Запрос);

Если Ответ.КодСостояния = 200 Тогда
    ТекстОтвета = Ответ.ПолучитьТелоКакСтроку();
    Сообщить(ТекстОтвета);
КонецЕсли;

Способ №2: Прямой вызов утилиты cURL

Если по каким-то причинам установка дополнительного ПО (Privoxy) невозможна, мы можем рассмотреть вариант прямого вызова системной утилиты curl.exe, которая в современных версиях Windows встроена в систему. У curl есть специфический флаг --socks5-hostname, который принудительно заставляет разрешать DNS-имя на стороне прокси-сервера.

Проанализируем пример реализации через запуск внешнего приложения:


ИмяФайлаРезультата = ПолучитьИмяВременногоФайла("txt");
// Используем флаг --socks5-hostname для делегирования DNS прокси-серверу Tor
КомандаЗапуска = "curl.exe --socks5-hostname 127.0.0.1:9050 http://meduzazoo2tfkzlc.onion/exchanger/balance -o """ + ИмяФайлаРезультата + """";

ЗапуститьПриложение(КомандаЗапуска, , Истина); // Ждем завершения

ФайлОтвета = Новый Файл(ИмяФайлаРезультата);
Если ФайлОтвета.Существует() Тогда
    Текст = Новый ЧтениеТекста(ИмяФайлаРезультата, КодировкаТекста.UTF8);
    Результат = Текст.Прочитать();
    Текст.Закрыть();
    УдалитьФайлы(ИмяФайлаРезультата);
КонецЕсли;

Этот метод исключает влияние механизмов платформы 1С на процесс сетевого обмена, однако он менее удобен для обработки сложных HTTP-заголовков и управления сессиями.

Важное замечание по формату адресов Onion

При отладке соединения обязательно обратите внимание на формат адреса ресурса. В истории развития Tor произошло важное изменение:

Если вы пытаетесь достучаться до адреса старого формата, вы будете получать ошибку соединения независимо от правильности настроек прокси в 1С.

Выясним нюансы настройки ИнтернетПрокси

Рассмотрим подробнее объект ИнтернетПрокси в 1С. Часто программисты допускают ошибку, пытаясь указать протокол в строке адреса. Выясним, как правильно инициализировать настройки для работы через SOCKS:


Прокси = Новый ИнтернетПрокси();
// Правильное использование метода Установить:
// Первый параметр - протокол, для которого применяется прокси (http или https)
// Второй параметр - только адрес прокси-сервера
// Третий параметр - порт
Прокси.Установить("http", "127.0.0.1", 9050); 

Однако помните: даже если вы укажете socks5 в качестве адреса (например, "socks5://127.0.0.1"), платформа может воспринять это некорректно в зависимости от версии и операционной системы. Поэтому использование Privoxy остается наиболее стабильным методом «подружить» 1С и скрытые сервисы Tor.

Подведем итоги

Для успешной работы с .onion сайтами из 1С необходимо обеспечить передачу доменного имени на сторону прокси (режим Remote DNS). Поскольку штатный HTTPСоединение часто пытается разрешить имя локально, мы используем либо промежуточный HTTP-прокси (Privoxy), либо внешние инструменты (curl) с явным указанием режима работы DNS. Это позволяет обойти ограничения системных библиотек Windows и успешно интегрировать 1С с ресурсами в сети Tor.

← На главную