Соединитесь, чтобы связаться с HTTPS через Tor - PullRequest
0 голосов
/ 07 января 2020

Я пытаюсь использовать T0rlib4j для подключения к веб-сайту с помощью Tor. Я пробовал несколько подходов, но ни один из них не был успешным. В настоящее время я просто хочу проверить IP

  1. Получить URL-адрес и открыть соединение с прокси-сервером. Это дает мне ошибку «Tor не HTTP-прокси», если я использую прокси-сервер типа HTTP или сервер. возвращает ошибку 501, если я использую прокси типа SOCKS.

Мой код для этого:

System.getProperties().put("proxySet", "true");
System.getProperties().put("socksProxyHost", "127.0.0.1");
System.getProperties().put("socksProxyPort", localPort);

URL url_name = new URL("https://bot.whatismyipaddress.com");

Proxy proxy = new Proxy(Type.HTTP, new InetSocketAddress("127.0.0.1", localPort));
BufferedReader sc =
        new BufferedReader(new InputStreamReader(((HttpsURLConnection) url_name.openConnection(proxy)).getInputStream()));

// reads system IPAddress
return sc.readLine().trim();
Получить сокет, используя класс утилит T0rlib4j. Проблема в том, что я не знаю, как получить ответ от сервера, потому что мне нужен URL-адрес перенаправления с сервера. Я пробовал это с помощью Utilities socket4a (выдает ошибку с неправильными первыми байтами) и socks5connection (java. net .UnknownHostException: https://bot.whatismyipaddress.com) (выдает эту ошибку на каждом веб-сайте).

Это просто попытка получить какие-либо данные с сайта:

Socket socket = Utilities.Socks5connection(new Socks5Proxy( "127.0.0.1", localPort), "https://bot.whatismyipaddress.com", hiddenServicePort);
InputStream stream = socket.getInputStream();
byte[] input = new byte[stream.available()];

stream.read(input);

StringBuilder builder = new StringBuilder();
for(byte byze : input)
    builder.append(byze).append(" ");
return builder.toString();

Я искал вокруг, но весь найденный код использует HTTP или устарел с использованием разных классов.

Я понял, что получил следующее сообщение об ошибке: Ваше приложение (использующее socks5 для порта 80) дает Tor только IP-адрес. Приложения, которые разрешают DNS самостоятельно, могут пропустить информацию. Попробуйте вместо этого использовать Socks4A (например, через privoxy или socat).

Я попытался использовать socks4a, и у меня нет ошибок, но сервер ничего мне не отправляет, я просто получаю пустую строку. Мой код:

Socket socket = Utilities.socks4aSocketConnection("google.com", hiddenServicePort, "127.0.0.1", localPort);

InputStream stream = socket.getInputStream();
byte[] input = new byte[stream.available()];

stream.read(input);

StringBuilder builder = new StringBuilder();
for(byte byze : input)
    builder.append(byze).append(" ");
return builder.toString();

В настоящее время у меня есть этот код для получения моего текущего IP:

URL url = new URL("https://bot.whatismyipaddress.com");
HttpsURLConnection connection = (HttpsURLConnection) url.openConnection();
connection.setRequestMethod("GET");
Scanner scanner = new Scanner(connection.getInputStream());
scanner.useDelimiter("\\Z");
return scanner.next();

Если я установил прокси-сервер с помощью системных свойств и получил эту ошибку: java. net .SocketException: не удается подключиться к прокси-серверу SOCKS: соединение отклонено: connect

Если я пытаюсь установить переменную прокси в openConnection, независимо от того, является ли это SOCKS или HTTP, я получаю одну из предыдущих ошибок .

Оглядываясь назад на метод, который не дал мне ответа, он возвращает 8 байтов, 0, 90, 0, 0, 0, 0, 0, 0, независимо от того, какой веб-сайт я разместил, если это не так. т, то я получаю 91 вместо 90

...