Носки 4 связывают в примере PHP

<?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 для подключения другого прокси. В этом примере второстепенный прокси-сервер является http-прокси. При первом подключении обычно подключен сервер, ответ предоставлен, но связь в это время завершена. Как продолжил общение этот пример?

1

Решение

Вам повезло, что вы получили ответ «Разрешено» — я не получаю никакого ответа от сервера SOCKS в OpenSSH, он просто закрывает соединение …

Как я понимаю описание SOCKS4, ответ на запрос типа 2 (BIND) содержит номер порта и IP-адрес; Когда к ним прибудет соединение, ваша программа сможет прочитать следующий пакет состояния, который сообщает о соединении. Время ожидания соединения ограничено (кажется, 2 минуты). Это в основном для клиента FTP — серверу FTP необходимо обратное соединение с клиентом, а BIND позволяет установить соединение.

Если вы хотите инициировать соединение со своей стороны, используйте запрос типа 1 (CONNECT). Кроме того, убедитесь, что порт и IP-адрес в запросе верны — кажется, в вашем коде они 80 и 192.240.30.126.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]