dapphp/torutils

用于通过控制协议与Tor交互的类,查询目录权限和服务器,DNS出口列表,一个易于使用Tor的SOCKS代理的curl包装器,以及其他更多功能。

v2.0.0alpha1 2020-12-27 19:58 UTC

README

Build Status Total Downloads Latest Stable Version

名称

Dapphp\TorUtils - 通过控制协议与Tor交互的类,查询目录权限和服务器,DNS出口列表,一个易于使用Tor的SOCKS代理的curl包装器,以及其他更多功能。

版本

1.15.3

作者

Drew Phillips drew@drew-phillips.com

需求

  • PHP 5.5或更高版本

描述

Dapphp\TorUtils 提供了一些用于与Tor工作的PHP库。主要功能集中在使用Tor控制协议与Tor交互,并提供了许多方法来简化发送命令、检索目录和节点信息以及使用控制协议修改Tor配置。还提供了一些其他实用类以增强鲁棒性。

提供以下类:

  • ControlClient:一个用于与Tor的控制协议交互的类,可以用来编写Tor中继的脚本或学习关于Tor网络中其他节点信息。使用此类,您可以通过控制器查询目录信息,获取和设置Tor配置值,使用GETINFO命令获取信息,订阅事件,并向控制器发送原始命令以获取解析后的响应。

  • DirectoryClient:一个用于直接从Tor目录权限(或任何其他Tor目录服务器)查询信息的类。此类可以用于通过昵称或指纹获取网络中活动节点的信息,或检索所有活动节点的列表以获取诸如IP地址、联系信息、出口策略、证书、运行时间、标志等信息。

  • TorDNSEL:一个简单的接口,用于查询地址是否属于Tor DNS出口列表,以查看IP地址是否属于Tor出口节点。

  • TorCurlWrapper:一个cURL包装器,确保HTTP请求通过Tor使用SOCKS5代理,并使用Tor解析DNS(如果支持)。它还将cURL错误转换为异常,并将响应解析为头和体部分。

基本示例

这个库提供了许多不同的功能(见示例目录),但一个常见的用例是向Tor控制器发送信号以更改IP地址。以下是如何做到这一点的示例

<?php

require_once 'vendor/autoload.php'; // using composer

use Dapphp\TorUtils\ControlClient;

$tc = new ControlClient();

try {
    $tc->connect(); // connect to 127.0.0.1:9051
    $tc->authenticate('password'); // can also use cookie or empty auth
    $tc->signal(ControlClient::SIGNAL_NEWNYM);
    echo "Signal sent - IP changed successfully!\n";
} catch (\Exception $ex) {
    echo "Signal failed: " . $ex->getMessage() . "\n";
}

示例

源代码包附带了一些与Tor控制协议和目录权限交互的示例。请参阅源代码包中的examples/目录。

目前,提供了以下示例:

  • dc_GetAllDescriptors-simple.php:使用DirectoryClient类查询目录权限以获取所有当前已知的描述符列表,并打印每个描述符的基本信息。

  • dc_GetServerDescriptor-simple.php:使用DirectoryClient获取单个描述符的信息并打印信息。

  • tc_AsyncEvents.php:使用ControlClient订阅控制器将发送到注册回调的事件。

  • tc_GetConf.php:使用ControlClient与控制器交互以获取和设置Tor配置选项。

  • tc_GetInfo.php:使用ControlClient与Tor控制器通信以获取关于控制器和网络中路由器的各种信息。

  • tc_NewNym.php:使用ControlClient向控制器发送"NEWNYM"信号以更改IP地址(如上所示)。

  • tc_CreateHiddenService.php: 告诉控制器创建一个新的洋葱(隐藏)服务。本示例展示了如何通过编程方式添加一个新的隐藏服务,删除它,并使用生成的私钥重新创建它。私钥可以安全存储,以便稍后使用相同的洋葱地址重新启动服务。

  • tc_SendData.php: 展示如何使用ControlClient发送任意命令并从控制器读取响应。回复以ProtocolReply对象的形式返回,这提供了轻松访问回复状态(例如成功/失败)的方法,并提供访问单个回复行或遍历每行并处理数据的方法。

  • TorDNSEL.php: 使用Tor DNS出口列表检查连接到特定IP:端口组合的远程IP地址是否是Tor出口路由器的一个示例。

  • CurlWrapper.php: 展示如何使用cURL包装器类通过Tor socks代理发送HTTP请求。

  • CurlCountry.php: 展示如何使用cURL包装器与特定国家的出口节点。

待办事项

以下命令不是由ControlClient直接实现的,需要实现或直接使用提供的函数与控制器通信来发出命令

  • RESETCONF
  • SAVECONF
  • MAPADDRESS
  • EXTENDCIRCUIT
  • SETCIRCUITPURPOSE
  • ATTACHSTREAM
  • POSTDESCRIPTOR
  • REDIRECTSTREAM
  • CLOSESTREAM
  • CLOSECIRCUIT
  • USEFEATURE
  • LOADCONF
  • TAKEOWNERSHIP
  • DROPGUARDS
  • HSFETCH
  • HSPOST

版权

Copyright (c) 2022 Drew Phillips
All rights reserved.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:

- Redistributions of source code must retain the above copyright notice,
  this list of conditions and the following disclaimer.
- Redistributions in binary form must reproduce the above copyright notice,
  this list of conditions and the following disclaimer in the documentation
  and/or other materials provided with the distribution.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
POSSIBILITY OF SUCH DAMAGE.

捐赠

BTC: 1dJyNBaKBqRXVVMw5uVPyz7M3tMrh3gU2 ETH: 0x51A1057D485da13fB9C37C8ed3C5B3BA59e950D1 Flattr: OpenInternet