SOCKS + PHP --- HELP!
Господа, помогите плиз... замучился уже.... никто случаем не знает как реализовать соеденение через soks5(4), ток без curl?(если можно с примером..) Это вообще возможно без curl?.....
Задача собственно такая:
Открывать соеденение с сервером через Socks и получать от него данные......
А чем курл не угодил?
Код:
$host = "";
$path = "";
$fp = fsockopen($host,80,$errno,$errstr,30);
if(!$fp) echo"$errstr ($errno)<br />\n";
else{
$headers = "GET $path HTTP/1.0\r\n";
$headers .= "Host: $host\r\n";
$headers .= "Accept: *\r\n";
$headers .="Accept-Charset: UTF-8\r\n"; // <<====
$headers .= "Accept-Charset: *\r\n";
$headers .= "Accept-Encoding: deflate\r\n";
$headers .= "Accept-Language: ru\r\n";
$headers .= "User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; ru) Opera 8.01\r\n\r\n";
fwrite($fp,$headers);
fclose($fp);
$path = "";
$fp = fsockopen($host,80,$errno,$errstr,30);
if(!$fp) echo"$errstr ($errno)<br />\n";
else{
$headers = "GET $path HTTP/1.0\r\n";
$headers .= "Host: $host\r\n";
$headers .= "Accept: *\r\n";
$headers .="Accept-Charset: UTF-8\r\n"; // <<====
$headers .= "Accept-Charset: *\r\n";
$headers .= "Accept-Encoding: deflate\r\n";
$headers .= "Accept-Language: ru\r\n";
$headers .= "User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; ru) Opera 8.01\r\n\r\n";
fwrite($fp,$headers);
fclose($fp);
fsockopen() - не подходит? Напиши класс для работы с Socks5 и работай на здоровье.
Код:
<?php
$fp = fsockopen("www.example.com", 80, $errno, $errstr, 30);
if (!$fp) {
echo "$errstr ($errno)<br />\n";
} else {
$out = "GET / HTTP/1.1\r\n";
$out .= "Host: www.example.com\r\n";
$out .= "Connection: Close\r\n\r\n";
fwrite($fp, $out);
while (!feof($fp)) {
echo fgets($fp, 128);
}
fclose($fp);
}
?>
$fp = fsockopen("www.example.com", 80, $errno, $errstr, 30);
if (!$fp) {
echo "$errstr ($errno)<br />\n";
} else {
$out = "GET / HTTP/1.1\r\n";
$out .= "Host: www.example.com\r\n";
$out .= "Connection: Close\r\n\r\n";
fwrite($fp, $out);
while (!feof($fp)) {
echo fgets($fp, 128);
}
fclose($fp);
}
?>
Сервер чем-то похож на прокси - могу предположить, что проксирует он на более низком уровне. Можно проксировать любые Application протоколы, включая ICQ, HTTP.
Описание протокола на русском языке:
http://www.codenet.ru/webmast/socks51.php
http://www.codenet.ru/webmast/socks51.php --- Очень хорошо написано!
Только как все эти процедуры на php реализовать, да так чтоб по короче? Хоть и читал я много о том, что через socks также как и через прокси не выйдет, но всё же решил испытать, такой вот код:
$socket = fsockopen("66.235.178.233","1080", &$errno, &$errstr, 10);
if(!$socket)
{
$res='oblom';
}
else
{
$res='maza';
fputs($socket, "GET http://www.2ip.ru HTTP/1.0\r\n");
fputs($socket, "Host: www.2ip.ru\r\n");
fputs($socket, "Accept: text/html, application/xml;q=0.9, application/xhtml+xml, image/png, image/jpeg, image/gif, image/x-xbitmap ;q=0.1\r\n");
fputs($socket, "User-Agent: BSGen\r\n\r\n");
while(!feof($socket))
{
$page .= fgets($socket);
}
}
fclose($socket);
print $res."<br><br><br><br>"."/".$page;
А возращает он мне.... да нечего не возращает!!!!!!!
Типа соеденение есть я ему(серверу) послал данные(так же как и делал в случае с прокси и всё было ништяк, загружалась страница 2ip.ru, Где показывался ip прокси сервера...), а он мне впрочем что-то прислал, ноя так понял нечто бинарное, либо моя опера не печатает ничего, а в исходном тексте видны какой то квадрат и вовсе непонятные мне символы.......(аж челых три штуки)...
Так что вопрос остаётся открытым! Но уточняется, как осуществить подключение именно по протоколу socks5(4) c сервером, заставить его открыть нужную мне html страницу(http ведь поддержует?) и вернуть её мне.....
Что никто не задумывался над этим что ли?
Curl не угодил, своей тормознутостью.... И невозможностью использования на некоторых хостах....
Только как все эти процедуры на php реализовать, да так чтоб по короче? Хоть и читал я много о том, что через socks также как и через прокси не выйдет, но всё же решил испытать, такой вот код:
$socket = fsockopen("66.235.178.233","1080", &$errno, &$errstr, 10);
if(!$socket)
{
$res='oblom';
}
else
{
$res='maza';
fputs($socket, "GET http://www.2ip.ru HTTP/1.0\r\n");
fputs($socket, "Host: www.2ip.ru\r\n");
fputs($socket, "Accept: text/html, application/xml;q=0.9, application/xhtml+xml, image/png, image/jpeg, image/gif, image/x-xbitmap ;q=0.1\r\n");
fputs($socket, "User-Agent: BSGen\r\n\r\n");
while(!feof($socket))
{
$page .= fgets($socket);
}
}
fclose($socket);
print $res."<br><br><br><br>"."/".$page;
А возращает он мне.... да нечего не возращает!!!!!!!
Типа соеденение есть я ему(серверу) послал данные(так же как и делал в случае с прокси и всё было ништяк, загружалась страница 2ip.ru, Где показывался ip прокси сервера...), а он мне впрочем что-то прислал, ноя так понял нечто бинарное, либо моя опера не печатает ничего, а в исходном тексте видны какой то квадрат и вовсе непонятные мне символы.......(аж челых три штуки)...
Так что вопрос остаётся открытым! Но уточняется, как осуществить подключение именно по протоколу socks5(4) c сервером, заставить его открыть нужную мне html страницу(http ведь поддержует?) и вернуть её мне.....
Что никто не задумывался над этим что ли?
Curl не угодил, своей тормознутостью.... И невозможностью использования на некоторых хостах....
Чем cURL плох, или задача не использовать его?? Он ведь освобождает от гемороя сокетов.
Походу разработки моего проекта возникла ещё два вопроса, буд благодарен за любую помощь в их решении:
1)Вопрос реализации. Всем известно, что javascript есть замечательная функция Math.random() возращающая не менее замечательные числа с точностью до 17 знака после запятой... Вопрос: как сделать в php аналог этой функции?
2)Вопрос философский наверное... Я подключаюсь к серверу через сокет, отправляю ему какие-то данные и мне на фиг не надо получать от него ответ, но очень хотелось бы, что сервер бы считал он отослал ответ, и клиент его принял.... Вопрос: как так бы сделать?(не хочу принимать данные, ибо ммного времени на это уходит) Или можно просто
закрыть сокет после отправки, а сервер пусть потом отсылает данные в пустоту и думает, что я их принимаю?
Тогда лучше использовать CURL - это будет на порядок проще чем программировать сокеты.