rovazh / phpsocks
SOCKS5代理客户端,纯PHP编写,无依赖。
dev-master
2024-03-10 00:37 UTC
Requires
- php: ^7.4 || ^8.0
Requires (Dev)
- mockery/mockery: 1.7.x-dev
- phpunit/phpunit: ^9
- vimeo/psalm: ^5
This package is not auto-updated.
Last update: 2024-09-29 12:31:11 UTC
README
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)。