Начнем с того, что однажды мне понадобилось зайти в вконтакте.
В то время я работал в одной крупной компании. Локальный прокси-сервер блокировал все запросы в содержании, которого присутствовали признаки данного ресурса, и не только его. О существовании анонимайзеров, я, конечно же, знал. Но опробовав быстродействие и возможности подобного сервиса, крайне огорчился.
Кроме того, из нынешнее устройства Сети следует, что любой узел через, который проходит трафик, может его просмотреть, а HTTP-трафик вообще передается в открытом виде.
И за это еще нужно платить деньги, имея в распоряжении внешний IP и собственный веб-сервер.
Так родилась идея создания простого скрипта перенаправления трафика и удаления фильтруемой (прокси) информации.
Для начала оговорюсь, что web-proxy на базе:
— Apache 2
— PHP with mod_rewrite, php_curl
Рассматривается только работа с ВКонтакте и его особенности.
В .htaccess необходимо дописать строки:
Это перенаправит трафик на один файл.
имя_скрипта — не следует делать index.php и т.п.
Если просто перенаправить все запросы на один скрипт, авторизация работать не будет. Необходимо отправить запросы на 2 домена: vkontakte.ru/login.php и login.vk.com/?act=login
Домена больше 3-го уровня в ВК не видел, поэтому полного разбора домена не делал.
Все (*) поддомены также необходимо добавить в DNS и VirtualHost.
С запросами также не все так просто — они могут быть двойными массивами. В частности это относится к поиску. Поэтому это тоже нужно учитывать. Большей вложенности не замечал.
Я делал это так:
С POST-запросами аналогично.
Ничего сверхъестественного не применяется, обычные регулярные выражения и функции работы со строками для удаления фильтруемого трафика и замены ссылок.
Также не забудьте, что ВК работает с кодировкой Windows-1251.
И JavaScript может передаваться сжатым gzip, что исправляется библиотекой cURL:
причем, данный параметр корректно работает и с несжатыми js-скриптами.
Хочу сказать, что данный скрипт использовался причем успешно.
Обход фильтрующего прокси-сервера, т.е. робота не составляет труда, но админов никто не отменял, а их обман совсем другое дело.
Очевидно, что основной трафик приходится на изображения. И для этого, т.е. чтобы не было подозрений на большой трафик с одного IP, планировалось написание распределенной системы их загрузки, но до этого дело не дошло.
P.S. Данная реализация позволяет воспроизводить аудио и видео контент, в то время как некоторые аналоги не поддерживают данную возможность. Игры, к сожалению, не поддерживаются.
P.P.S. Честно говоря, после перехода ВК на https-авторизацию (не знаю, когда это случилось), я не проверял работу скрипта, точнее работу авторизации.
В то время я работал в одной крупной компании. Локальный прокси-сервер блокировал все запросы в содержании, которого присутствовали признаки данного ресурса, и не только его. О существовании анонимайзеров, я, конечно же, знал. Но опробовав быстродействие и возможности подобного сервиса, крайне огорчился.
Кроме того, из нынешнее устройства Сети следует, что любой узел через, который проходит трафик, может его просмотреть, а HTTP-трафик вообще передается в открытом виде.
И за это еще нужно платить деньги, имея в распоряжении внешний IP и собственный веб-сервер.
Так родилась идея создания простого скрипта перенаправления трафика и удаления фильтруемой (прокси) информации.
Для начала оговорюсь, что web-proxy на базе:
— Apache 2
— PHP with mod_rewrite, php_curl
Рассматривается только работа с ВКонтакте и его особенности.
Итак, начнем
В .htaccess необходимо дописать строки:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule ^(.*)$ /имя_скрипта?url=$1 [QSA]
Это перенаправит трафик на один файл.
имя_скрипта — не следует делать index.php и т.п.
Далее, авторизация
Если просто перенаправить все запросы на один скрипт, авторизация работать не будет. Необходимо отправить запросы на 2 домена: vkontakte.ru/login.php и login.vk.com/?act=login
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, "email=".$email."&pass=".$pass);
curl_setopt($ch, CURLOPT_URL, 'http://vkontakte.ru/login.php');
$body = curl_exec($ch);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, "email=".$email."&pass=".$pass);
curl_setopt($ch, CURLOPT_URL, 'http://login.vk.com/?act=login');
$body = curl_exec($ch);
Сабдомены
Домена больше 3-го уровня в ВК не видел, поэтому полного разбора домена не делал.
$subdomain = explode(".",$_SERVER['SERVER_NAME']);
if (count($subdomain) > $cnt_server) $sub = $subdomain[0]."."; else $sub = "";
Все (*) поддомены также необходимо добавить в DNS и VirtualHost.
Построение запросов, GET и POST
С запросами также не все так просто — они могут быть двойными массивами. В частности это относится к поиску. Поэтому это тоже нужно учитывать. Большей вложенности не замечал.
Я делал это так:
$gl = $_GET;
$first_get = true;
$flink = false;
foreach($gl as $key_get => $value_get){
if(!$flink){
$flink = true;
continue;
}
if(is_array($gl[$key_get])){
foreach($gl[$key_get] as $dbkey_get => $dbvalue_get){
$link .= ($first_get?"?":"&").$key_get."[".$dbkey_get."]".(!empty($dbvalue_get) ? "=".urlencode($dbvalue_get) : "");
$first_get = false;
}
} else {
$link .= ($first_get?"?":"&").$key_get.(!empty($value_get) ? "=".urlencode($value_get) : "");
$first_get = false;
}
}
С POST-запросами аналогично.
Фильтрация
Ничего сверхъестественного не применяется, обычные регулярные выражения и функции работы со строками для удаления фильтруемого трафика и замены ссылок.
Также не забудьте, что ВК работает с кодировкой Windows-1251.
И JavaScript может передаваться сжатым gzip, что исправляется библиотекой cURL:
curl_setopt($ch, CURLOPT_ENCODING , 'gzip');
причем, данный параметр корректно работает и с несжатыми js-скриптами.
В заключение
Хочу сказать, что данный скрипт использовался причем успешно.
Обход фильтрующего прокси-сервера, т.е. робота не составляет труда, но админов никто не отменял, а их обман совсем другое дело.
Очевидно, что основной трафик приходится на изображения. И для этого, т.е. чтобы не было подозрений на большой трафик с одного IP, планировалось написание распределенной системы их загрузки, но до этого дело не дошло.
P.S. Данная реализация позволяет воспроизводить аудио и видео контент, в то время как некоторые аналоги не поддерживают данную возможность. Игры, к сожалению, не поддерживаются.
P.P.S. Честно говоря, после перехода ВК на https-авторизацию (не знаю, когда это случилось), я не проверял работу скрипта, точнее работу авторизации.