При работе с внешними сервисами иногда возникает необходимость интеграции с ресурсами, расположенными в защищенной сети Tor (доменная зона .onion). Типичная ситуация: разработчик запускает службу tor.exe, настраивает ИнтернетПрокси в 1С, указывает SOCKS5, но при попытке выполнить запрос получает досадную ошибку: «Ошибка работы с Интернет: Couldn't resolve host name». Давайте вместе разберем, почему штатные механизмы 1С ведут себя именно так, и как реализовать стабильное соединение.
Основная проблема кроется не в коде 1С как таковом, а в том, как платформа взаимодействует с сетевыми библиотеками операционной системы. Разберем этот механизм подробнее. Существует два способа работы с SOCKS5-прокси:
.onion, разрешение имени (resolve) завершается ошибкой еще до того, как запрос уйдет в сторону Tor..onion сайтами.В платформе 1С объект ИнтернетПрокси при указании протокола socks5 зачастую работает в первом режиме. Более того, на ОС Windows 1С использует системную библиотеку WinHTTP, которая имеет ограниченную поддержку удаленного DNS через SOCKS. В результате мы видим ошибку Couldn't resolve host name, так как система пытается найти .onion в обычном интернете.
Рассмотрим наиболее надежный архитектурный подход. Чтобы 1С могла «общаться» с Tor, мы добавим промежуточное звено — Privoxy. Это неинвазивный метод, который позволяет 1С использовать привычный HTTP-протокол для проксирования, делегируя сложные задачи преобразования в SOCKS5h специализированному софту.
Разберем процесс настройки по шагам:
tor.exe (по умолчанию порт 9050).config.txt) найдите и добавьте следующую строку:
forward-socks5t / 127.0.0.1:9050 .
Теперь проанализируем, как изменится наш код в 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 Тогда
ТекстОтвета = Ответ.ПолучитьТелоКакСтроку();
Сообщить(ТекстОтвета);
КонецЕсли;
Если по каким-то причинам установка дополнительного ПО (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-заголовков и управления сессиями.
При отладке соединения обязательно обратите внимание на формат адреса ресурса. В истории развития Tor произошло важное изменение:
meduzazoo2tfkzlc.onion. Внимание: поддержка этого формата была полностью прекращена в конце 2021 года. Современные версии tor.exe не смогут подключиться к таким узлам.Если вы пытаетесь достучаться до адреса старого формата, вы будете получать ошибку соединения независимо от правильности настроек прокси в 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.