我花了最近几天寻找这个问题的解决方案,虽然有很多半相关问题,但没有一个答案显示成功的用例通过Tor发送成功的HTTP请求使用Ruby的隐藏服务。
在所有答案中似乎都不清楚的一点是Tor浏览器捆绑包如何充当请求的代理。
我尝试了多种攻击途径,最近的尝试是the PHP code here使用Ruby CURL库调整curl请求到隐藏服务。
这是我使用Curb gem的代码,它实现了Ruby的一些libcurl绑定:
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运行它,使用Tor浏览器包的代理设置指定的IP地址和端口:
$ 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浏览器可以通过编程方式连接到隐藏服务,我们都应该能够:)
答案 0 :(得分:1)
如果你在“curl”-block中设置它,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