Авторские статьи Делаем прокси на php

Discussion in 'Статьи' started by Anwy, 14 Feb 2015.

  1. Anwy

    Anwy Elder - Старейшина

    Joined:
    16 Dec 2004
    Messages:
    265
    Likes Received:
    232
    Reputations:
    45
    Зачастую нужно обратиться с ip Сервера на конкретный адрес url, либо еще какие-то операции.
    Ну, или просто поменять ip.

    Простой прокси выглядит так:

    Code:
    echo file_get_contents($_GET['q']);
    
    $content=file_get_contents("http://mett.pro/proxy.php?=".$url);
    Работает через функцию file_get_contents, которая вызывается get запросом.
    Точнее мы просто загружаем страницу через сервер...

    Ну а теперь рассмотрим более сложный вариант:

    1. Для начала создадим файл proxy.php
    далее создадим формочку для ввода запроса:

    Code:
    <title>PHP Proxy</title>
    
    <div align="center">
    <form id="form" name="form" method="get" action="">
    Введите ссылку:
    <input name="q" type="text" size="100" />
    <br />
    <input type="submit" value="Войти" />
    </form>
    </div>
    <hr>
    2. Теперь начинаем кодить на php.
    Пишем после созданной формы

    Code:
    <?
    if($_GET['q'])  //если существует ссылка
    {
    $site=file($_GET['q']); //получаем содержимое сайта по ссылке и пихаем в переменную $site
    for($i=0; $i < count($site); $i++)
    {
    echo $site[$i]; //выводим в цикле каждую строку сайта
    }
    }
    ?>
    3. Сохраняем и переходим по ссылке http://ваш_сайт.ру/proxy.php
    Вводим в форму например http://google.ru, должен загрузиться сайт без картинок и ссылки не должны работать (естественно на стороне сервера должен быть внешний доступ )
    Работает? Если нет, то пробуйте все сначала. Если да, то идем дальше:
    4. Что же нужно сделать далее? Загрузить картинки и сделать ссылки на сайтах работающими.
    Используя функцию str_replace, сделаем замену всех ссылок и путей.
    Добавим в код в цикл for:

    Code:
    $url = parse_url($_GET['q']);   //получаем хост с ссылки
    $host = 'http://'.$url['host'].'/'; //добавляем к ней http:// и путь /
    $link = array('href="', 'src="', 'action="');   //Суем в массив $link возможные параметры, где указывается путь
    $replace = array('href="http://ваш_сайт.ру/proxy.php?q='.$host, 'src="http://ваш_сайт.ру/proxy.php?q='.$host, 'action="http://ваш_сайт.ру/proxy.php?q='.$host); 
    //То на что нужно заменить вышеуказанные параметры
    $site[$i] = str_replace($link, $replace, $site[$i]);    //производим замену и пихаем в массив $site[$i]
    В итоге должно получиться так:

    <title>PHP Proxy</title>
    <div><form method="get"> Введите ссылку:
    <input name="q">
    </form></div>
    <hr />

    + На данный момент имеется уже куча готовых скриптов по реализации php proxy с уже замененными путями и тд, например https://www.glype.com/
     
    3 people like this.
  2. grimnir

    grimnir Members of Antichat

    Joined:
    23 Apr 2012
    Messages:
    1,114
    Likes Received:
    830
    Reputations:
    231
    Интересная статья, я обычно через http://translate.google.com/ захожу как прокси
    http://lifehacker.ru/2013/07/19/google-proxy/
     
    _________________________
    1 person likes this.
  3. xleroy

    xleroy New Member

    Joined:
    13 Dec 2011
    Messages:
    3
    Likes Received:
    0
    Reputations:
    0
    Автоматизировать бы это в браузере както с переключением на разные шелы.
     
  4. GAiN

    GAiN Elder - Старейшина

    Joined:
    2 Apr 2011
    Messages:
    2,550
    Likes Received:
    172
    Reputations:
    99
    Хреново то - что переходить по ссылкам нельзя !!! :mad:
    а так делал когда то
    вот код накидал, всё работает, ssl открывает, видео на ютюбе проигрывается
    перебрасывает он при клике, если кликаем на главной странице ютюба по видео - то добавляет окончание watch?v=WlVh2E6P-3Q к моему домену, или в поиске набрать что либо, нужно что бы он его проксировал



    PHP:
    <?php
    if($_POST['open']) {
    $_POST['url'] = htmlspecialchars(stripslashes($_POST['url']));
    $urls_form $_POST['url'];
    header('Content-Type: text/html; charset=utf-8');
    ini_set('user_agent'"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit/537.13+ (KHTML, like Gecko) Version/5.1.7 Safari/534.57.2\r\nX-MyCustomHeader: Browser");
    $opts = array(
      
    'http'=>array(
        
    'method'=>"GET",
        
    'header'=>"Accept-language: en\r\n" .
                  
    "Cookie: login=xxx; pass=xxx\r\n"
      
    )
    );

    $context stream_context_create($opts);
    $fp fopen($urls_form'r'false$context);
    fpassthru($fp);
    fclose($fp);
    $form =  '
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    </head>
    <form method="post">
    <label for="url">URL:</label>
    <input type="text" name="url" value="'
    .$urls_form.'" id="url">
    <input type="submit" name="open" value="открыть">
    </form>'
    ;
    echo 
    '<p>'.$form.'</p><hr><br><br></html>'; exit();
    }
    ?>
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    </head>
    <form method="post">
    <label for="url">URL:</label>
    <input type="text" name="url" value="" id="url">
    <input type="submit" name="open" value="открыть">
    </form>
    </html>

    смотрел скрипты анонимайзеров слишком они наворочены куча кода
     
  5. xleroy

    xleroy New Member

    Joined:
    13 Dec 2011
    Messages:
    3
    Likes Received:
    0
    Reputations:
    0
    а раньше вроде был софт для ачата который через шелы делал проксю и т.п. не актуально уже?
     
  6. qaz

    qaz Elder - Старейшина

    Joined:
    12 Jul 2010
    Messages:
    1,551
    Likes Received:
    173
    Reputations:
    75
    http://wonted.ru/programms/vpsproxy-gold/
     
    #6 qaz, 14 Feb 2015
    Last edited by a moderator: 15 Feb 2015
  7. 5maks5

    5maks5 Elder - Старейшина

    Joined:
    29 Aug 2010
    Messages:
    452
    Likes Received:
    265
    Reputations:
    40
    Исходники к нему похерены (якобы) и софт уже корректно не работает - ошибки с https (не открывает их). (есть мнение, что wonted продал исходники в приват)
    Серт зашит намертво, если найдется гений-дебаггер, который исправит - будет работать.
    А иначе - бесполезная штуковина.
    Сам использовал, года 2 назад, с обилием шеллов это была сказка :)
     
  8. Anwy

    Anwy Elder - Старейшина

    Joined:
    16 Dec 2004
    Messages:
    265
    Likes Received:
    232
    Reputations:
    45
    Насчет уже готовых решений, есть, например, - glype proxy/,
    asproxy
     
  9. 5maks5

    5maks5 Elder - Старейшина

    Joined:
    29 Aug 2010
    Messages:
    452
    Likes Received:
    265
    Reputations:
    40
    Glype - это self-hosted скрипт, т.е. ставится на сервер.
    Ну и следствие этого - работа через браузер.
    Вопрос был в том, что нет готовых альтернатив в том плане, что десктопного софта, с цепочками, миксованием трафа и возможностью замены стандартного хука прокси в системе. ;)
     
  10. Anwy

    Anwy Elder - Старейшина

    Joined:
    16 Dec 2004
    Messages:
    265
    Likes Received:
    232
    Reputations:
    45
    Ну таковых алтернатив не знаю, ага.