【问题标题】:How can I know the IP address of Tor route?如何知道 Tor 路由的 IP 地址?
【发布时间】:2018-06-11 17:27:25
【问题描述】:

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

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

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

【问题讨论】:

    标签: tor


    【解决方案1】:

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

    Tor 浏览器(由 TorButton 提供支持)具有特殊的域隔离功能,它通过使用 Tor 的 SOCKS 代理的凭据通过隔离电路代理对特定 domain:port 组合的请求。这样您就可以在 Tor 浏览器中打开两个标签页,访问两个不同的域并为每个站点使用不同的 IP 地址(因为每个标签页使用完全不同的电路)。

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

    这是一个概念证明,可帮助您入门。

    • 启动 Tor
    • 连接到 Tor 的控制端口
    • 开始监听 STREAM 事件SETEVENTS STREAM
    • 使用代理凭据通过 Tor 发出 SOCKS 请求(如果用户名是您要连接到的站点的域:端口组合,并且您将用于该域的每个后续请求的随机密码,则效果最佳)
    • 监控与您的域目标匹配的 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是中间,MilesPrower是出口。仔细检查 SOCKS_USERNAMESOCKS_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 地址和有关电路中继电器的信息。

    进一步阅读:

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

    希望对你有所帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-02-20
      • 2016-08-25
      • 2012-05-27
      • 1970-01-01
      • 1970-01-01
      • 2011-05-07
      • 2018-08-30
      • 1970-01-01
      相关资源
      最近更新 更多