PHP SSL stream_socket_client won't use created $context

前端 未结 1 496
长发绾君心
长发绾君心 2021-01-25 00:38

I\'m totally disappointed. I am connecting to a ssl servers, and direct connections working well, but when I am trying to add stream context to use proxy or socks5, socket won\'

1条回答
  •  伪装坚强ぢ
    2021-01-25 00:55

    I've found the right way. This connects thru socks5 servers perfectly.

    $desthost = "google.com";
    $port     = 443;
    $conflag  = STREAM_CLIENT_CONNECT;
    
    try
    {
        $socket = stream_socket_client( "tcp://127.0.0.1:1080", $errno, $errstr, 15, $conflag );
    
        fwrite( $socket, pack( "C3", 0x05, 0x01, 0x00 ) );
        $server_status = fread( $socket, 2048 );
        if ( $server_status == pack( "C2", 0x05, 0x00 ) )
        {
            // Connection succeeded
        }
        else
        {
            die( "SOCKS Server does not support this version and/or authentication method of SOCKS.\r\n" );
        }
    
        fwrite( $socket, pack( "C5", 0x05, 0x01, 0x00, 0x03, strlen( $desthost ) ) . $desthost . pack( "n", $port ) );
        $server_buffer = fread( $socket, 10 );
    
        if ( ord( $server_buffer[0] ) == 5 && ord( $server_buffer[1] ) == 0 && ord( $server_buffer[2] ) == 0 )
        {
            // Connection succeeded
        }
        else
        {
            die( "The SOCKS server failed to connect to the specificed host and port. ( " . $desthost . ":" . $port . " )\r\n" );
        }
    
        stream_socket_enable_crypto( $socket, TRUE, STREAM_CRYPTO_METHOD_SSLv23_CLIENT );
    }
    catch ( Exception $e )
    {
        die( $e->getMessage() );
    }
    
    if ( $socket === FALSE )
    {
        die( "bad socket" );
    }
    
    fwrite( $socket, "GET /\n" );
    echo fread( $socket, 8192 );
    

    0 讨论(0)
提交回复
热议问题