Я создаю приложение для очистки веб-страниц Android Jsoup, которое подключается к Tor через прокси-сервер SOCKS через порт 9150 (я хочу, чтобы запросы были полностью анонимными):
private const val TOR_PORT = 9040
private fun establishJsoupConnection(url: String): Connection {
return if (!useTor) {
Jsoup.connect(url)
} else {
val socketAddress = InetSocketAddress("127.0.0.1", TOR_PORT)
val proxy = Proxy(Proxy.Type.SOCKS, socketAddress)
Jsoup.connect(url).proxy(proxy)
}
}
Я не использую какую-либо специальную библиотеку для установки соединения, только те, что предоставляются JDK. Есть библиотеки Tor для Android, хотя мне сказали, что они не нужны.
Проблема в том, что всякий раз, когда я запускаю код, я получаю следующее исключение:
java.net.SocketException: failed to connect to /127.0.0.1 (port 9150) from /127.0.0.1 (port 47806) after 30000ms: isConnected failed: ECONNREFUSED (Connection refused)
Первым делом я попытался изменить номер порта с 9040 на множество других портов Tor, к которым можно подключиться, но это не сработало. У меня была аналогичная проблема, в которой смена порта помогла, хотя в этом случае это не так. Обратите внимание, что проблема воссоздается только на Android, если я запускаю код на своем рабочем столе, он работает нормально, хотя на моем рабочем столе установлен Tor, так что это также может быть причиной.
Я пробовал и другие вещи, такие как замена 127.0.0.1
на localhost
- это ничего не исправило. Я также пытался искать в Интернете другие решения, но безрезультатно. Я также пытался полностью отключить брандмауэр, но это не помогло.
Была одна вещь, которая «временно» решила проблему: установка приложения Tor для Android с F-Droid.
По какой-то причине прокси-сервер работает только в том случае, если я устанавливаю приложение Tor для Android, а затем повторно запускаю приложение, но если я удаляю приложение Tor для Android, исключение возвращается снова.
Я предполагаю, что приложение Tor для Android что-то делает в фоновом режиме, чтобы разрешить соединение.
Приложение Tor для Android (Tor) сложное, и я, скорее всего, никогда не узнаю, что оно «делает» в фоновом режиме для установления соединения, поэтому я прошу помощи.
Я, честно говоря, удивлен, у меня в голове нет ни малейшего представления о том, что может делать приложение, чтобы установить соединение. Я думал, что это может быть как-то связано с брандмауэром, хотя я отключил брандмауэр для своего приложения, и это не меняет ситуацию. Не помогает и то, что я новичок в сетях как таковых.
@ drew010 Тогда как это нормально работает на моем настольном компьютере? Я даже удалил браузер Tor со своего ПК, и он все еще работает нормально. Кроме того, есть ли способ подключиться к Tor без установки приложения? Я знаю, что есть некоторые сторонние библиотеки, которые вы можете использовать для установления соединения. Также парень с форумов Tor сказал, что приложение должно работать нормально и что мне не нужны никакие библиотеки для подключения к Tor.
Вы используете Tor на своем рабочем столе? Если нет, я не понимаю, как это могло бы работать, или что могло бы прослушивать 9050/9150 в качестве прокси-сервера SOCKS, если бы не Tor. Я не знаю каких-либо сторонних библиотек, которые подключаются к Tor и предлагают ту же поддержку SOCKS, что и он. Даже если бы такая вещь существовала, ее нужно было бы постоянно обновлять, чтобы включать новые функции/исправления ошибок/изменения в различных протоколах и клиентах Tor. Возможно, вас заинтересует Arti (gitlab.torproject.org/tpo/core/arti), клиент Tor, написанный на Rust, который будет более переносимым, но он все еще находится в разработке.
TLDR, если вы хотите, чтобы ваше приложение подключалось к Tor с помощью SOCKS, вам необходимо запустить клиент Tor на локальном устройстве или компьютере. На Android это будет Tor Browser или Orbot, на Windows — экспертный пакет Tor или браузер.
@drew010 Спасибо, а что вы тогда думаете об этой библиотеке: github.com/thaliproject/Tor_Onion_Proxy_Library — это тоже мошенничество? Он утверждает: «Предоставляет JAR и AAR для встраивания Tor Onion Proxy в программу Java или Android».
Этот проект (Tor Onion Proxy Library) использует основные бинарные файлы Tor для подключения к сети (см. FAQ: Откуда взялись бинарные файлы для Tor OP?). В конечном итоге он использует этот проект (github.com/guardianproject/tor-android) для создания общей библиотеки Tor для Android. Если вы используете это, вам в конечном итоге придется создавать новые версии вашего приложения, когда будут доступны новые выпуски Tor (в противном случае вы будете использовать более старый клиент).
@ drew010 хорошо, спасибо, приятель, думаю, я отмечу этот вопрос как исправленный. меня это угнетает, так как я хотел делать анонимные запросы jsoup, но это то, что есть.
Удачи. Подключение к Tor, установление каналов и все, что позволяет анонимно передавать запросы по сети, — немалый подвиг. Вот почему требуется программное обеспечение Tor. Я думаю, что ваш лучший (самый простой?) вариант здесь — потребовать, чтобы ваши пользователи Android установили и запустили Orbot (доступно в Play Store, F-Droid, прямая загрузка APK) перед использованием вашего приложения. Затем ваше приложение может подключиться к прокси-серверу Tor SOCKS, который предоставляет Orbot. Пусть Orbot занимается всем, что касается Tor. По мере выхода обновлений Orbot они могут обновлять его, и вам вообще не нужно обновлять свое приложение / двоичные файлы.
Спасибо за награду @tomtomkt. Удачи в вашем проекте и во всем, что вы решите сделать.
Чтобы подключиться к Tor через прокси-сервер SOCKS, ваше устройство должно быть подключено к сети Tor и настроено на открытие порта SOCKS для проксирования через Tor.
Причина, по которой прокси-сервер работает только при установке и запуске приложения Tor Browser, заключается в том, что это приложение подключается к сети Tor и прослушивает порт 9150 для соединений SOCKS и отправляет их через Tor.
Если вы хотите, чтобы ваше приложение могло устанавливать анонимные подключения через Tor, тогда что-то на устройстве или в вашем приложении должно обрабатывать подключение к сети и ретрансляцию подключений.
Один простой способ, который вы нашли, — запустить приложение Tor Browser и настроить SOCKS-клиент на использование 127.0.0.1:9150. Одним из преимуществ этого метода является то, что обновления, связанные с Tor, обрабатываются приложением Tor Browser. Orbot — еще одно приложение, которое можно использовать таким же образом.
В комментариях вы указали библиотеку, в которую встроен исполняемый файл Tor, используемый для подключения к Tor и облегчения соединений. Это хороший вариант, если вы не хотите зависеть от запуска другого приложения для подключения и запуска прокси-сервера Tor SOCKS. Недостатком является то, что вам может потребоваться чаще обновлять приложение, чтобы включить критические обновления в двоичные файлы Tor.
Таким образом, для работы прокси-сервера на устройстве должно быть какое-то программное обеспечение, которое обрабатывает соединение Tor и предоставляет порт SOCKS, который вы можете использовать в своем приложении.
«По какой-то причине прокси работает, только если я устанавливаю приложение Tor для Android, а затем повторно запускаю приложение». Да, это потому, что приложение Tor отвечает за подключение и связь с сетью Tor. Приложение также запускает прокси-сервер Tor SOCKS на порту 9150. Без запуска программного обеспечения Tor вы не можете использовать прокси через Tor. Вам нужно будет либо запустить Orbot, либо приложение Tor Browser, чтобы ваше приложение могло использовать этот прокси-сервер Tor. Это помогает и отвечает на ваш вопрос?