Всем известно что есть разные виды прокси (http,https,socks4,socks5...), но как в пхп можно определить, как с прокси работать, как с http или как с соксом соответственно? Насколько я знаю то у http,https одинаковый протокол работы с прокси, и с ними можно работать просто добавив к curl запросу эту строчку PHP: curl_setopt($ch, CURLOPT_PROXY, 'ip:port'); У socks4,socks5 другой протокол, и работать они станут лишь так PHP: curl_setopt($ch, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5); curl_setopt($ch, CURLOPT_PROXY, 'ip:port'); Но а как сделать автоматическое определение протокола работы с проксей без быдло-проверки "если так страница не появилась значить пробуем как сокс"?
Mixon Нет. Подробнее читайте в этом топике /thread344815.html и про CURLOPT_HTTPPROXYTUNNEL Socks4 и socks5 разные протоколы. Курл не умеет работать через socks4 Попробуйте подумать логически и придумать способ зная только iport без подключения "угадать" протокол. Все прокси-протоколы обязывают клиента первым отправлять запрос. И вообще: проверять прокси с помощью курла - неправильно. Например, достаточно сложно узнать на каком этапе произошла ошибка. Была ли это ошибка подключения к самой прокси, или ошибка подключения прокси к целевому сайту, или ошибка авторизации. Вариантов - много.
Ну тогда нужен хотя-бы более эстетический вариант проверки какой это прокси соединившись с ним, не через курл с его милионном параметров не нужных, пытаясь получить сайт какой-то а потом парсить его, и есть спарсился сайт - значит прокси жив и он такого-то типа, а то-то более изысканное. пока хз что, но мб можно допустим через fsockopen или что-то подобное подконнектится лишь чтоб узнать тип прокси? допустим тот-же пинг на компе, он-же не заставляет кучу данных принять и отправить о компе, а лишь маякает что да, я сдесь, так-же что-то надо чтоб проверить прокси на его тип, не нагружая его, если это возможно как-то
Mixon, могу только предположить... Проверять через свой скрипт. Допустим при коннекте чере простой прокс, $_SERVER имеет такие ключи, как Тестил на двух проксах. По поводу socks'сов сказать не могу поскольку не имею в наличии образца для теста, а искать некогда.
Mixon Socks4 и socks5 достаточно детерминированные протоколы и да, их достаточно легко проверить на работоспособность. С HTTP/HTTPS не все так очевидно и следует все таки подключаться к целевому серверу. У вас наблюдается непонимание работы сетевых протоколов (надеюсь вы не думаете что все работает на магии?). ICMP (пинг) - не самый простой в реализации протокол И да, VY_CMa, правильно советует - вы должны проверять не абы какой сайт, а собственный отдающий например JSON определенного формата. Чтобы не приходилось "парсить" левые данные
Об этом и шла речь как я понял. надо сделать то что легче проверять, тобишь методом исключения, проверить, если это socks5 то значи юзать параметр сокса, если не он - юзать хттп, и всё.... с дальнейшей проверкой хттп и прочего это уже не суть вопроса, нужно именно как-либо выбрать какой параметр использовать: CURLPROXY_SOCKS5 или CURLPROXY_HTTP (их всего 2)... по подробней плиз о том как можно сокс5й проверить что он сокс собстна без запроса к странице какой-либо.
Mixon http://www.opennet.ru/base/net/socks5_rfc1928.txt.html Если по простому - достаточно подключиться по адресу и отправить комбинацию "\x05\x01\x00" Если вернулось "\x05\x00" - это сокс5 прокси. Если \x05\xff - это сокс5 прокси, но с авторизацией. Если вернулось что-то иное или ничего не вернулось - это НЕ сокс5 прокси
это редкие случаи, да и если так - то никаких проблем не возникнет, ибо хоть так хоть так работать будет, а ведь и надо-то чтоб работал...)
как так? я когда тестироват прокси чекер своими глазами видел как через прокси при CURLPROXY_SOCKS4 открывает сайт, а через CURLPROXY_SOCKS5 нет
qaz По уточненным данным - есть поддержка сокс4 в курле в пхп. Просто документацию никто не удосужился изменить, но все константы - определены и работают. А как чекать - согласно протокола, естественно http://en.wikipedia.org/wiki/SOCKS#SOCKS4
SOCKS5 с авторизацией возвращает \x05\x02. \xff — метод не определен (fail, если короче). http://ru.wikipedia.org/wiki/Socks http://csocks.altervista.org/rfc/socks4.protocol.txt http://google.ru и т.д. У меня в древней чекалке для SOCKS4 написан такой код (Perl): Code: my $sk4_conn = "\x04" # Socks version . "\x01" # Connect . pack ('n', $check_port) # Port . gethostbyname ($check_host) # Remote address . "\x00"; $check_host и $check_port — запрашиваемый через SOCKS сайт ($check_port по дефолту 80). В ответ сервер отдает 8 байт, важными являются первые два: \x00\x5a (по RFC; \x5a — request granted). PS. Если не изменяет память, на практике некоторые SOCKS4 в ответе первым байтом отдают \x04, а не \x00. Обнаружилось это при отладке чекалки в сниффере.
krypt3r Если бы вы внимательно посмотрели, то я предлагаю отправлять \x05\x01\x00 - что означает, что мы ожидаем прокси без авторизации. Ответ \x05\xFF означает, что метод без авторизации не поддерживается, но прокси - рабочая. И продолжая занудствовать - \x02 указывает на авторизацию plain-text, но еще существует GSSAPI авторизация + неограниченное число собственных.
Я правильно понимаю что использовать для этого curl уже никак не получится ? Он вроде ко всему приделывает http заголовки .