phpseclib\Net\SSH1::_get_binary_packet PHP Метод

_get_binary_packet() публичный Метод

See 'The Binary Packet Protocol' of protocol-1.5.txt for more info. Also, this function could be improved upon by adding detection for the following exploit: http://www.securiteam.com/securitynews/5LP042K3FY.html
См. также: self::_send_binary_packet()
public _get_binary_packet ( ) : array
Результат array
    function _get_binary_packet()
    {
        if (feof($this->fsock)) {
            //user_error('connection closed prematurely');
            return false;
        }
        if ($this->curTimeout) {
            $read = array($this->fsock);
            $write = $except = null;
            $start = strtok(microtime(), ' ') + strtok('');
            // http://php.net/microtime#61838
            $sec = floor($this->curTimeout);
            $usec = 1000000 * ($this->curTimeout - $sec);
            // on windows this returns a "Warning: Invalid CRT parameters detected" error
            if (!@stream_select($read, $write, $except, $sec, $usec) && !count($read)) {
                //$this->_disconnect('Timeout');
                return true;
            }
            $elapsed = strtok(microtime(), ' ') + strtok('') - $start;
            $this->curTimeout -= $elapsed;
        }
        $start = strtok(microtime(), ' ') + strtok('');
        // http://php.net/microtime#61838
        $data = fread($this->fsock, 4);
        if (strlen($data) < 4) {
            return false;
        }
        $temp = unpack('Nlength', $data);
        $padding_length = 8 - ($temp['length'] & 7);
        $length = $temp['length'] + $padding_length;
        $raw = '';
        while ($length > 0) {
            $temp = fread($this->fsock, $length);
            $raw .= $temp;
            $length -= strlen($temp);
        }
        $stop = strtok(microtime(), ' ') + strtok('');
        if (strlen($raw) && $this->crypto !== false) {
            $raw = $this->crypto->decrypt($raw);
        }
        $padding = substr($raw, 0, $padding_length);
        $type = $raw[$padding_length];
        $data = substr($raw, $padding_length + 1, -4);
        if (strlen($raw) < 4) {
            return false;
        }
        $temp = unpack('Ncrc', substr($raw, -4));
        //if ( $temp['crc'] != $this->_crc($padding . $type . $data) ) {
        //    user_error('Bad CRC in packet from server');
        //    return false;
        //}
        $type = ord($type);
        if (defined('NET_SSH1_LOGGING')) {
            $temp = isset($this->protocol_flags[$type]) ? $this->protocol_flags[$type] : 'UNKNOWN';
            $temp = '<- ' . $temp . ' (' . round($stop - $start, 4) . 's)';
            $this->_append_log($temp, $data);
        }
        return array(self::RESPONSE_TYPE => $type, self::RESPONSE_DATA => $data);
    }