rovazh/phpsocks

SOCKS5代理客户端,纯PHP编写,无依赖。

dev-master 2024-03-10 00:37 UTC

This package is not auto-updated.

Last update: 2024-09-29 12:31:11 UTC


README

Build Status

SOCKS5代理客户端,纯PHP编写,无依赖。

特性

  • 支持SOCKS v5
  • 支持CONNECT命令
  • 支持用户名/密码认证

要求

PHP版本7.4或更高

安装

composer require rovazh/phpsocks

用法

普通TCP连接

通过SOCKS5代理服务器连接到example.net的80端口。

$client = new \PhpSocks\Client([
    'host' => '127.0.0.1', // SOCKS5 server ipv4 or ipv6 or hostname
    'port' => 1080, // SOCKS5 server port
]);

try {
    $stream = $client->connect('tcp://example.com:80');
    $stream->write("GET / HTTP/1.0\r\n\r\n");
    echo $stream->readAll();
    $stream->close();
} catch (\PhpSocks\Exception\PhpSocksException $e) {
    // Handle exception
}

安全TLS连接

以下示例演示通过SOCKS5代理服务器建立到example.net的443端口的加密TLS连接。

$client = new \PhpSocks\Client(['host' => '127.0.0.1', 'port' => 1080]);

try {
    $stream = $client->connect('tls://example.net:443', [
        'tls' => [
            'peer_name' => 'example.net',
        ]
    ]);
    $stream->write("GET / HTTP/1.0\r\n\r\n");
    echo $stream->readAll();
    $stream->close();
} catch (\PhpSocks\Exception\PhpSocksException $e) {
    // Handle exception
}

connect方法接受一个关联数组,包含SSL上下文选项,可用于配置连接到目标主机时的TLS。

请注意,当使用普通TCP连接tcp://时,SSL上下文选项不起作用。

认证

该库支持RFC 1929中定义的SOCKS5服务器的用户名/密码认证。

$client = new \PhpSocks\Client([
    'host' => '127.0.0.1',
    'port' => 1080,
    'auth' => [
        'username' => 'proxy_user',
        'password' => 'proxy_pass',
    ]
]);

超时

默认情况下,库在连接到SOCKS5服务器时依赖于default_socket_timeout。要运行时设置,可以在创建Client实例时使用connect_timeout选项。

$client = new \PhpSocks\Client([
    'host' => '127.0.0.1',
    'port' => 1080,
    'connect_timeout' => 5.0, // 5 seconds
]);

还有发送/接收数据到/从SOCKS5服务器和目标主机的超时。默认情况下,此超时由底层操作系统设置。在创建Client实例时,要显式设置它,请使用timeout选项。

$client = new \PhpSocks\Client([
    'host' => '127.0.0.1',
    'port' => 1080,
    'connect_timeout' => 5.0, // 5 seconds
    'timeout' => 3, // 3 seconds
]);

许可证

PhpSocks的代码在MIT许可条款下分发(见LICENSE)。