java - 使用 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。有没有办法得到后者?
解决方案
情况很复杂。Tor 可以通过不同的路径为不同的电路路由流量。因此,如果您打开 Tor 浏览器,并在一个选项卡中转到一个域,而在另一个选项卡中转到另一个域,则几乎可以肯定每个选项卡都有不同的公共 IP(这称为流隔离)。
您可以将 SOCKS 连接与流相关联,然后通过从 Tor 控制器嗅探事件来确定公共 IP,但这样做的代码并不那么简单。
这是我概述该过程的另一个答案:如何知道 Tor 路由的 IP 地址?
Torbutton 的答案底部还有一些示例,这些示例显示了当前选项卡的电路路径(包括保护、中间和退出节点的 IP 地址)。
确定 IP 的最简单(但不一定是最好)的方法是向返回您的公共 IP 的站点发出请求。
但是,默认情况下,您通过 Tor 的 SOCKS 代理的请求不是流隔离的,因此它们都将共享一个 IP,并且如果发出NEWNYM
信号,或者电路出现故障并使用不同的路径再次构建,它们都会受到更改。
推荐阅读
- sql - 如何根据子查询是否存在或返回 null 在 UPDATE 中合并不同的值?
- javascript - 如何在按钮单击时切换元素并在外部单击时关闭?
- android - 如何为我的 android 应用程序添加代码混淆
- python - For循环使用python从硒中的excel表中读取数据
- java - 将从服务器读取的图像保存为位图到 Android 内部存储
- git - 如何让 git 从分支而不是标签中拉出?
- c++ - 当我在嵌入式设备中运行 C++ 代码时出现分段错误
- python - Python 的 lambda 列表只取最后一个值
- html - 如何在 Vuejs 中为选项卡使用路由器视图?
- ios - 如何使用 Swift iOS 向 ST17H26 发送自定义蓝牙命令?