当前位置: 首页 > 知识库问答 >
问题:

如何用Ruby构建HTTP请求并将其发送到Tor隐藏服务

苏雅珺
2023-03-14

我花了几天的时间来寻找这个问题的解决方案,虽然有很多半相关的问题,但没有一个答案显示了使用Ruby通过Tor向隐藏服务发送成功HTTP请求的成功用例。

在所有的答案中,有一点似乎不清楚,那就是Tor浏览器包是如何充当请求的代理的。

我尝试了多种攻击途径,最近的一次是尝试修改这里的PHP代码,以便使用Ruby curl库向隐藏服务发送curl请求。

这是我使用curbe 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

然后,我尝试使用Tor浏览器包的代理设置指定的IP地址和端口,通过socksify运行此程序:

$ 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浏览器可以以编程方式连接到隐藏的服务,我们也应该能够:)

共有1个答案

柴昆杰
2023-03-14

Curl只有在您的“curl-block”中设置代理时才使用代理。

例如:

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
 类似资料:
  • 问题内容: 我是一名具有游戏和3D图形背景的程序员,目前我想提高自己的网络和Web开发技能。 为此,我有一项任务要完成。我的想法是,我希望能够发送HTTP请求或类似于运行基于LAMP的安装程序的Web服务器的内容。我想知道如何使用Cocoa Touch框架从iPhone发送包含一些信息的HTTP请求到我的Web服务器。 我希望Web服务器(使用PHP)能够将发送的信息记录到纯文本文件中,以便以后用

  • 很多时候我们需要在页面打开的时候,读取远程的内容,然后在当前页面显示. 这就需要用到 http请求了. vue页面调用http请求 vuejs 内置了对发送http请求的支持. 只需要在对应页面的script 标签内加上对应的代码就好. 例如: 我们新增一个页面,叫 "博客列表页" : src/components/BlogList.vue, 内容如下: <template> <div >

  • 我在多个线程上运行以下方法: HTTP请求是并行处理的吗?以这种方式发出请求是否会阻止其他线程发送请求,直到第一个响应到达?

  • 我有一个javaScript代码,其中我发送了带有一些参数的http post。Post参数是一个类似于以下内容的json: 在JavaScript中,我只是打开request、设置头和发送参数。Post请求如下所示: 现在我需要在Java中进行相同的调用(由于一些内部POC需求)。为此,我做了以下几点: 但这给了我错误。 提前道谢。

  • 问题内容: 在Java中,如何编写HTTP请求消息并将其发送到HTTP WebServer? 问题答案: 你可以使用。 示例(从此处开始),进行了改进。包括在链接腐烂的情况下:

  • 从Excel电子表格执行HTTP POST需要什么VBA代码?

  • 问题内容: 让我们假设这个网址… (此处的ID需要在POST请求中发送) 我想将其发送到服务器的,该服务器在POST方法中接受它。 如何在Java中执行此操作? 我尝试了这个: 但是我仍然不知道如何通过POST发送 问题答案: 由于原始答案中的某些类已在Apache HTTP Components的较新版本中弃用,因此,我将发布此更新。 顺便说一句,你可以在此处访问完整的文档以获取更多示例。

  • 我正试图使用Guzzle6 http客户端发送一个post请求。我发送了两个请求,一个内容类型为(Guzzle),另一个为(Guzzle)。 我将客户机初始化如下(分别为和): 我收到的响应没有相同的数据/正文: :的输出 但是为什么我首先问这个问题是因为我面临签名不匹配的问题。 当我发送请求时,我添加了一个带有签名的头,签名是。因此,当以和的形式发送数据时,我得到了不同的签名(因为在的情况下,接