V5版本设置带有账户跟密码的SK5代理方法

Dalong
$remoteConnection = new AsyncTcpConnection("tcp://{$addr}");
$remoteConnection->proxySocks5 = "lanlon666:lanlon666@127.0.0.1:1111"; // 自己设置的这个格式可以自己修改

需要改动 AsyncTcpConnection.php 文件两处地方:

if ($this->proxySocks5) {
    if(strpos($this->proxySocks5, '@') !== false && strpos($this->proxySocks5, ':') !== false){
        $pa = explode('@', $this->proxySocks5);
        $up = explode(':', $pa[0]);
        $this->proxySocks5 = $pa[1];
        $this->socketContext['ssl']['socks5_username'] = $up[0];
        $this->socketContext['ssl']['socks5_password'] = $up[1];
    }
    var_dump('设置 proxySocks5 > ' . $this->proxySocks5 . '>peer_name = ' . $this->remoteHost);
    $this->socketContext['ssl']['peer_name'] = $this->remoteHost;
    $context = stream_context_create($this->socketContext);
    $this->socket = stream_socket_client("tcp://$this->proxySocks5", $errno, $err_str, 0, STREAM_CLIENT_ASYNC_CONNECT, $context);
}

// Proxy
if ($this->proxySocks5 && $address === $this->proxySocks5) {
    // 如果带有账户跟密码
    if(isset($this->socketContext['ssl']['socks5_username']) && isset($this->socketContext['ssl']['socks5_password'])){
        var_dump('socks5 开始认证 > ' . $this->socketContext['ssl']['socks5_username'] . '  ' . $this->socketContext['ssl']['socks5_password']);
        fwrite($this->socket, chr(5) . chr(2) . chr(0) . chr(2));
        $res = fread($this->socket, 512);
        var_dump('socks5 认证结果 > ' . bin2hex($res));
        fwrite($this->socket, chr(1) . chr(strlen($this->socketContext['ssl']['socks5_username'])) . $this->socketContext['ssl']['socks5_username'] . chr(strlen($this->socketContext['ssl']['socks5_password'])) . $this->socketContext['ssl']['socks5_password']);
        $res = fread($this->socket, 512);
        var_dump('socks5 认证结果2 > ' . bin2hex($res));
        fwrite($this->socket, chr(5) . chr(1) . chr(0) . chr(3) . chr(strlen($this->remoteHost)) . $this->remoteHost . pack("n", $this->remotePort));
        fread($this->socket, 512);
    }else {
        fwrite($this->socket, chr(5) . chr(1) . chr(0));
        fread($this->socket, 512);
        fwrite($this->socket, chr(5) . chr(1) . chr(0) . chr(3) . chr(strlen($this->remoteHost)) . $this->remoteHost . pack("n", $this->remotePort));
        fread($this->socket, 512);
    }

}
68 1 0
1个评论

Dalong

老大可以做一个统一格式,方便后续更新啥的。

  • 暂无评论

Dalong

2399
积分
0
获赞数
0
粉丝数
2018-04-21 加入
🔝