问题 Ruby,Tor和Net :: HTTP :: Proxy


如果这是一个无耻的怀疑我提前道歉:我想在我的Ruby代码中使用代理来获取一些网页。而且我想偷偷摸摸!所以我正在使用Tor。

我有Tor运行,我可以像往常一样使用Net :: HTTP.get(uri)。但我无法弄清楚如何使用Net :: HTTP :: Proxy来获取uri。我也无法弄清楚如何使用Tor来帮助我取消匿名。

任何帮助是极大的赞赏。请不要只添加一个 链接到Net :: HTTP :: Proxy的ruby-doc页面。如果我明白了,我不会在这里问这个:-)


另一种简单的方法是使用 SOCKSify,但在这种情况下,我收到以下错误:

/usr/lib/ruby/gems/1.9.2-p290/gems/socksify-1.5.0/lib/socksify.rb:189:in 'socks_authenticate': SOCKS version not supported (SOCKSError)

我之前从未做过任何网络编程。任何关于此的指导也将非常有帮助。谢谢 :-)


4455
2017-11-12 23:50


起源

如何链接到 网:: HTTP ::代理? - pguardiario
谢谢你指出来。链接添加了问题。 - Chthonic Project
绝对有趣的事业。我期待着可能的解决方案。 - Jason Kim
究竟你不明白什么?文档似乎很简单。 - pguardiario
Tor浏览器运行时,我可以看到我的“明显”IP地址。由于这是我想要传递所有HTTP请求的地址,我这样做 proxy = Net::HTTP::Proxy('address.given.by.Tor',8080) ......但是,当我这样做的时候 proxy.start('www.google.com') { |http| <print the response code> }, 什么都没发生。我最终必须按Ctrl + C. - Chthonic Project


答案:


您正在使用HTTP代理类,因此您必须提供HTTP代理的IP。 Tor浏览器有  HTTP代理捆绑。

所以你可以安装一些代理软件,例如 Privoxy的 并将其配置为使用Tor的SOCKS:

的config.txt forward-socks4a / 127.0.0.1:9050 .

然后使用Privoxy的默认值 听地址 在你的脚本中:

proxy = Net::HTTP::Proxy('127.0.0.1',8118)

要么 使用SOCKSify。 根据 文档

require 'socksify/http'
uri = URI.parse('http://rubyforge.org/')
Net::HTTP.SOCKSProxy('127.0.0.1', 9050).start(uri.host, uri.port) do |http|
  http.get(uri.path)
end

无需额外的软件..

第三 解决方案是使用SOCKSify如下:

$ socksify_ruby localhost 9050 script.rb

它重定向Ruby脚本的所有TCP连接,这意味着您根本不需要使用任何代理代码。

为了澄清,您必须了解127.0.0.1:9050是Tor的SOCKS地址,而127.0.0.1:8118是Privoxy的地址。 


14
2017-12-14 16:37