Подтвердить что ты не робот

Соединение сокетов PHP через прокси

Я работаю над существующей библиотекой, и я хочу, чтобы она установила соединение с сокетом только через прокси. Текущий код

$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
$result = socket_connect($socket, "www.host.com", 8080);

Где я хочу установить это соединение через прокси (SOCK4/5)

Я пробовал

socket_bind($socket, '127.0.0.1', '9150');

Какой сервер vidalia, также я пробовал некоторые прокси из Интернета, который работал на firefox как носок, но не смог получить этот код через него.

Когда я пытаюсь поставить выше строки, я получил следующую ошибку.

Предупреждение: socket_bind(): невозможно связать адрес [10048]: разрешено только одно использование каждого адреса сокета (протокол/сетевой адрес/порт).

4b9b3361

Ответ 1

Не хотите оскорблять вас, но, похоже, вы не понимаете основ сетей TCP/IP. Функции socket_ не помогут вам справиться с прокси SOCKS, поскольку у них нет клиента SOCKS.

Функция socket_bind() предназначена для установки адреса источника для соединения. Не для привязки к удаленной службе. В основном вы указываете, что ваш сокет отображается как 127.0.0.1:9150, и он жалуется, поскольку у вас, вероятно, есть ваш прокси-сервер SOCKS. Даже если у вас будет доступ к этому адресу/порту, это не поможет: вы просто не можете подключиться с локального хоста в другом месте.

Правильное использование socket_bind() происходит после socket_create() и до socket_connect() - после установления соединения вы не можете изменить адрес источника.

С устранением этой проблемы вы можете обратиться к своей проблеме о том, чтобы "установить соединение с сокетом только через прокси". Честно говоря, ваш вопрос действительно расплывчато по деталям: чего вы хотите достичь? Вам нужен поток или вам просто нужно позвонить на какой-либо удаленный веб-сервер с запросом HTTP?

Учитывая ваше непонимание сокетов и что у вас есть "www.host.com", 8080 в вашем вопросе, я считаю, что вы ищете какую-то веб-страницу, вытащенную с сайта www.host.com:8080 через прокси SOCKS. В этом случае вам не нужно изобретать велосипед и использовать cURL: см. Как использовать прокси-сервер SOCKS 5 с cURL?

Если моя догадка была неправильной, и вам действительно нужен поток через прокси SOCKS, тогда вам понадобится внешняя библиотека, которая сделает это за вас. Там нет стандартного расширения PHP, которое сделает это за вас. Вы можете посмотреть https://github.com/clue/php-socks, чтобы получить потоки данных над SOCKS.