Как создать и отправить HTTP-запрос к скрытой службе Tor с помощью Ruby

Я провел последние пару дней в поисках решения этой проблемы, и хотя есть довольно много полуактуальных вопросов, ни один из ответов не показывает успешный вариант использования для отправки успешного HTTP-запроса через Tor к скрытой службе. используя Руби.

Одна вещь, которая кажется неясной во всех ответах, — это то, как пакет браузера Tor действует как прокси для запросов.

Я пробовал несколько способов атаки, последней из которых была попытка адаптировать здесь код PHP для отправки запросов curl к скрытым службам с использованием библиотек Ruby CURL.

Это мой код, использующий гем Curb, который реализует некоторые привязки libcurl для Ruby:

require 'curb'

url = 'http://am4wuhz3zifexz5u.onion' #a known, functioning hidden service

c = Curl::Easy.new(url) do |curl| 
  curl.headers["User-Agent"] = "Mozilla/5.0 (Windows NT 6.1; rv:24.0) Gecko/20100101 Firefox/24.0" #the user agent string from the most recent version of the tor browser
  curl.verbose = true
end

c.perform
c.inspect

Затем я попытался запустить это через socksify, используя IP-адрес и порт, указанные в настройках прокси-сервера пакета браузера Tor:

$ socksify_ruby 127.0.0.1 9150 tor-test/tor-test.rb

Это произвело следующий вывод:

* Adding handle: conn: 0x7fb1fe195e00
* Adding handle: send: 0
* Adding handle: recv: 0
* Curl_addHandleToPipeline: length: 1
* - Conn 0 (0x7fb1fe195e00) send_pipe: 1, recv_pipe: 0
* Could not resolve host: jhiwjjlqpyawmpjx.onion
* Closing connection 0

Каждый подход, который я пробовал, приводил к одному и тому же результату: URI скрытой службы не может быть разрешен

Может ли кто-нибудь помочь мне здесь или указать мне правильное направление? Я чувствую, что, поскольку браузер Tor может программно подключаться к скрытым службам, мы все тоже должны иметь возможность :)


person RickyTomatoes    schedule 25.02.2014    source источник


Ответы (1)


Curl использует прокси только в том случае, если вы настроили его в своем «curl»-блоке.

Например:

c = Curl::Easy.new() do |curl| 
    curl.proxy_tunnel = true
    curl.proxy_type = Curl::CURLPROXY_SOCKS5 # also available and default Curl::CURLPROXY_HTTP
    curl.proxy_url = '127.0.0.1:9050' # local tor client/proxy
    curl.headers["User-Agent"] = "Mozilla/5.0 (Windows NT 6.1; rv:24.0) Gecko/20100101 Firefox/24.0" #the user agent string from the most recent version of the tor browser
    curl.verbose = true
    curl.url = url # your example url
    curl.perform
    curl.inspect
end

К сожалению, curl не использует прокси для разрешения имени хоста. Другими словами, я не нашел способа заставить curl использовать прокси для разрешения имени хоста.

Но вы можете попробовать

#enable socksify debug
Socksify::debug = true

#own try via direct use of socksify and Net::HTTP
uri = URI.parse('http://am4wuhz3zifexz5u.onion/') #a known, functioning hidden service

# some debug stuff - just ignore ;-)
puts uri
puts uri.host
puts uri.port
puts uri.path

res1 = Net::HTTP.SOCKSProxy('127.0.0.1', 9050).start(uri.host, uri.port) do |http| 
    http.get(uri.path)
end
person keocra    schedule 27.05.2014
comment
В конце концов мне удалось заставить это работать, используя решение, аналогичное тому, что вы предложили с помощью Socksify. Большая часть проблемы заключалась в непонимании клиента Tor. Установление соединения и разрешение доменов .onion было тривиальной задачей после правильной настройки клиента Tor. - person RickyTomatoes; 02.06.2014