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