Авторизация в SOCKS5 proxy сервере через сокеты в PHP
Столкнулся с проблемой авторизации в Socks5 proxy через сокеты в PHP. Хочу подключиться к SMTP через прокси не используя Curl. Код работает, но если прокси требует авторизации то на моменте подключения к удалённому серверу он на долго повисает и потом в результате в ответе ничего нет, не пойму что не так.
// Данные для подключения :
$proxyIp = 'PROXY_IP_HERE';
$proxyPort = 'PROXY PORT HERE';
$proxyUsername = 'PROXY USERNAME HERE';
$proxyPassword = 'PROXY PASSWORD HERE';
$host = 'smtp.mail.ru';
$port = 465;
// Создание подключения :
$stream = pfsockopen($proxyIp, $proxyPort, $errno, $errstr, 10 );
// Запрос на авториазацию :
fwrite($stream, pack("C3", 0x05, 0x01, 0x02));
$data = fread($stream, 2048);
$data = unpack("Cversion/Cmethod", $data);
if( !isset($data['version']) || !isset($data['method']) || $data['version'] != 0x05 || $data['method'] != 0x02 )
die('ERROR CONNECT TO PROXY');
// Выполнение авторизации в SOCKS5 :
fwrite($stream, pack("C2", 0x01, strlen($proxyUsername)) . $proxyUsername . pack("C1", strlen($proxyPassword)) . $proxyPassword);
$data = fread($stream, 2048);
if($data != pack('C2',0x01,0x00)) {
die('ERROR PROXY AUTH');
}
// Подключение к серверу через SOCKS5 :
fwrite($stream, pack("C5", 0x05, 0x01, 0x00, 0x03, strlen($host)) . $host . pack("n", $port));
$data = fread($stream, 512);
if( substr($data, 0, 4) != pack('C4',0x05,0x00,0x00,0x01) ) {
$return=fread($stream,512);
if(substr($return,0,3)!='220'){
var_dump($errno, $errstr, $return);
}
}
// $data пуст