<?php
error_reporting(E_ALL);
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if ($socket === false)
echo "socket_create() failed: reason: " . socket_strerror(socket_last_error()) . "\n";
$result = socket_connect($socket, "92.51.77.126", 1080); // socks ip
if ($result === false)
echo "socket_connect() failed.\nReason: ($result) " . socket_strerror(socket_last_error($socket)) . "\n";
$in = "\x04\x02";
$in .= "\x00\x50"; // http proxy port
$in .= "\xc0\xf0\x2e\x7e"; // http proxy ip address
$in .= "\x00";
socket_write($socket, $in, strlen($in));
sleep(1);
$in = "HEAD / HTTP/1.1\r\n";
$in .= "Host: www.example.com\r\n";
$in .= "Connection: Close\r\n\r\n";
socket_write($socket, $in, strlen($in));
$out = '';
while ($out = socket_read($socket, 2048)) {
echo $out;
}
socket_close($socket);
?>
Я хотел бы связать прокси-сервер socks 4 для подключения другого прокси-сервера. В этом примере прокси-сервер secound является прокси-сервером http. Когда подключается первое, обычно подключается ответ сервера, но связь в это время завершена. Как продолжалось общение на этом примере?
Вам повезло, что вы получили ответ "Granted" - я не получаю никакого ответа от сервера SOCKS в OpenSSH, он просто закрывает соединение...
Поскольку я понимаю описание SOCKS4, ответ для запроса типа 2 (BIND) содержит номер порта и IP-адрес; когда к ним приходит соединение, ваша программа сможет прочитать следующий пакет состояния, который сообщает о соединении. Существует ограниченное время (кажется, 2 минуты) ожидания подключения. Это в основном для FTP-клиента - FTP-сервер нуждается в обратном подключении к клиенту, а BIND позволяет передавать соединение.
Если вы хотите инициировать соединение с вашей стороны, используйте запрос типа 1 (CONNECT). Кроме того, убедитесь, что порт и IP-адрес в запросе верны - кажется, в вашем коде они равны 80 и 192.240.30.126.