首页 > 解决方案 > 使用 Tor 浏览器:使用 SOCKS 代理时如何获取 IP 地址

问题描述

我正在尝试在我的代码中使用 TOR 浏览器,如下所示:

Proxy proxy = new Proxy(Proxy.Type.SOCKS, new InetSocketAddress("127.0.0.1", 9150));
//add proxy to some other Java class to use
System.out.println(proxy.address()); //127.0.0.1:9150

它将打印本地主机地址,而不是 TOR 浏览器将流量路由到的 IP。有没有办法得到后者?

标签: javaproxyiptor

解决方案


情况很复杂。Tor 可以通过不同的路径为不同的电路路由流量。因此,如果您打开 Tor 浏览器,并在一个选项卡中转到一个域,而在另一个选项卡中转到另一个域,则几乎可以肯定每个选项卡都有不同的公共 IP(这称为流隔离)。

您可以将 SOCKS 连接与流相关联,然后通过从 Tor 控制器嗅探事件来确定公共 IP,但这样做的代码并不那么简单。

这是我概述该过程的另一个答案:如何知道 Tor 路由的 IP 地址?

Torbutton 的答案底部还有一些示例,这些示例显示了当前选项卡的电路路径(包括保护、中间和退出节点的 IP 地址)。

确定 IP 的最简单(但不一定是最好)的方法是向返回您的公共 IP 的站点发出请求。

但是,默认情况下,您通过 Tor 的 SOCKS 代理的请求不是流隔离的,因此它们都将共享一个 IP,并且如果发出NEWNYM信号,或者电路出现故障并使用不同的路径再次构建,它们都会受到更改。


推荐阅读