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

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

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

我怀疑我需要从控制端口做一些操作.

最佳答案
工作方式有点棘手. Tor会在启动时创建不同的电路,SOCKS请求将使用它认为合适的电路.

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

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

这是一个让您入门的概念证明.

>启动Tor
>连接到Tor的控制端口
>开始侦听STREAM事件SETEVENTS STREAM
>使用代理凭证通过Tor发出SOCKS请求(如果用户名是域名,它将最有效:您要连接的站点的端口组合,以及您将用于此域的每个后续请求的随机密码)
>监视与域目标匹配的SENTCONNECT事件的流事件,并从事件中提取电路ID.
>向控制器发送GETINFO电路状态命令以获取电路列表,电路路径将与上一步的电路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事件,其中目标是我们请求的域端口组合.

这些活动的格式是:

"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是中间,MilesPrower是退出.仔细检查SOCKS_USERNAME和SOCKS_PASSWORD字段是否存在并与请求中的字段匹配,以确保您拥有正确的电路.

获取中继信息

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

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

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

进一步阅读:

> Tor control-spec.txt:使用Tor控制端口的协议实现细节
> Tor Browser Design:在4.5节(跨源标识符不可链接性)中查找Tor电路和HTTP连接可链接性
> torbutton source:它是domain-isolatortor-circuit-display.js

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

我希望这有帮助!

转载注明原文:我怎么知道Tor路由的IP地址? - 代码日志