我怎么知道Tor路由的IP地址?

时间:2018-06-11 17:27:26

标签: tor

我是一名在日本大学进行Tor研究的大学生。

如何显示路线的IP地址,如图所示?

enter image description here

我怀疑我需要从控制端口进行一些操作。

1 个答案:

答案 0 :(得分:0)

有效的方式有点棘手。 Tor会在启动时创建不同的电路,SOCKS请求将使用它认为合适的电路。

Tor浏览器(由TorButton提供支持)具有特殊的域隔离功能,通过使用带有Tor的SOCKS代理的凭证,它通过隔离电路代理特定domain:port组合的请求。这就是如何在Tor浏览器中打开两个选项卡,并访问两个不同的域并为每个站点使用不同的IP地址(因为每个选项卡使用完全不同的电路)。

要完成你想要做的事情,你需要模仿这种行为。

这是一个让你入门的概念证明。

  • 启动Tor
  • 连接到Tor的控制端口
  • 开始收听STREAM事件SETEVENTS STREAM
  • 使用代理凭证通过Tor发出SOCKS请求(如果用户名是域名,则最有效:您要连接的站点的端口组合,以及您将用于此域的每个后续请求的随机密码)< / LI>
  • 监控与您的域目标匹配的SENTCONNECT事件的流事件,并从事件中提取电路ID。
  • 向控制器发送GETINFO circuit-status命令以获取电路列表,电路路径将与上一步中的电路ID一起出现。

这将为您提供正在中继的节点,然后您可以获取信息以获取中继名称和地址。

扩展上面的PoC,这是你可以期待的示例输出。

连接到控制器并侦听事件

AUTHENTICATE "password"
250 OK
SETEVENTS STREAM
250 OK

使用代理凭证发出请求

curl --socks5-hostname localhost:9050 \
-U "torproject.org%3A:randomPasswordHere" \
https://torproject.org/donate`

代理用户名是torproject.org:443,这是我们要求的域和端口。 randomPasswordHere是密码。

监控STREAM事件

当上述请求通过时,控制器将发送一些事件。

示例:

650 STREAM 153 NEW 0 torproject.org:443 SOURCE_ADDR=127.0.0.1:45508 PURPOSE=USER
650 STREAM 153 SENTCONNECT 38 torproject.org:443
650 STREAM 153 REMAP 38 154.35.132.71:443 SOURCE=EXIT
650 STREAM 153 SUCCEEDED 38 154.35.132.71:443
650 STREAM 153 CLOSED 38 154.35.132.71:443 REASON=DONE

我们感兴趣的事件是SENTCONNECT事件,其中target是我们请求的域端口组合。

这些活动的格式为:

"650" SP "STREAM" SP StreamID SP StreamStatus SP CircuitID SP Target
          [SP "REASON=" Reason [ SP "REMOTE_REASON=" Reason ]]
          [SP "SOURCE=" Source] [ SP "SOURCE_ADDR=" Address ":" Port ]
          [SP "PURPOSE=" Purpose]
          CRLF

将这些知识应用于上述数据,153是流ID,38是我们感兴趣的电路ID,torproject.org:443是我们要求的目标。

获取电路状态数据

现在知道我们的请求使用的电路ID,我们可以提取电路信息以找到请求从网络中获取的路径。

GETINFO circuit-status
250+circuit-status=
38 BUILT $9E1E4F5B5F94812D02C4D18CB4086CE71CA5C614~torpidsDEhetzner1,$F0D264435B31F70FEFB322794E93211A8419F890~ANGRYRONIN,$79E169B25E4C7CE99584F6ED06F379478F23E2B8~MilesPrower BUILD_FLAGS=NEED_CAPACITY PURPOSE=GENERAL TIME_CREATED=2018-06-14T17:26:38.216992 SOCKS_USERNAME="torproject.org:443" SOCKS_PASSWORD="randomPasswordHere"
.
250 OK

你会在这里看到其他电路,但为了简单起见我省略了它们。

38是我们感兴趣的电路ID,因此您可以解析电路信息以发现中继torpidsDEhetzner1是保护,ANGRYRONIN是中间,{{{ 1}}是退出。仔细检查MilesProwerSOCKS_USERNAME字段是否存在,并与请求中的字段匹配,以确保您拥有正确的电路。

获取中继信息

然后,您可以向控制器发出各种命令,以获取有关继电器的信息。

SOCKS_PASSWORD

从那里你可以提取有关电路中继电器的IP地址和信息。

进一步阅读:

  • Tor control-spec.txt:使用Tor控制端口的协议实现细节
  • Tor Browser Design:在第4.5节(跨源标识符不可链接性)中查找GETINFO ns/id/79E169B25E4C7CE99584F6ED06F379478F23E2B8 250+ns/id/79E169B25E4C7CE99584F6ED06F379478F23E2B8= r MilesPrower eeFpsl5MfOmVhPbtBvN5R48j4rg axOufc4UeKsDqI/SrNiH31jyB1Y 2018-06-14 05:38:34 62.210.129.246 443 80 s Exit Fast Guard Running Stable V2Dir Valid w Bandwidth=8170 . 250 OK
  • torbutton source:它是domain-isolatortor-circuit-display.js

stem(Python)或TorUtils(PHP)等库(披露:我是PHP TorUtils的作者)可以帮助与Tor控制协议进行通信。

我希望这有帮助!