![]() |
pproxy - прокси на PHP
Однажды мне понадобился прокси-сервер, работающий не как демон/служба а в контексте процесса веб-сервера. Подходящего не нашел поэтому написал свой, очень простой и достаточно юзабельный.
Описание Состоит из двух частей. На удаленный веб-сервер заливается первая часть прокси, написанная на PHP - скрипт pproxy.php. На локалхосте запускается вторая часть прокси, реализованная на Perl (скрипт plocal.pl), которая прослушивает порт как HTTP-прокси. На этот локальный HTTP прокси настраивается, например, браузер. Скрипты pproxy.php - первая, удаленная часть прокси, на PHP: PHP код:
Код:
use HTTP::Daemon;Использование прокси Допустим адрес pproxy.php будет http://site.com/proxy/pproxy.php Тогда локальный скрипт запускается так: Код:
perl plocal.pl -px http://site.com/proxy/pproxy.phpПостроение цепочки прокси Для примера случай с двумя элементами цепочки. Есть два веб-сервера с двумя скриптами pproxy: http://site1.com/proxy/pproxy.php и http://site2.com/proxy/pproxy.php Локальный скрипт запускается два раза с такими параметрами: Код:
perl plocal.pl -px http://site1.com/proxy/pproxy.phplocalhost -> site1.com -> site2.com -> target Думаю, несложно будет настроить и на более длинную цепочку. Запуск через Tor Если вы используете Tor вместе с Privoxy (по умолчанию на порту 8118) тогда прокси запускается так: Код:
perl plocal.pl -px http://site.com/proxy/pproxy.php -tpx http://localhost:8118К сожалению, через Tor некоторые сайты могут загружаться некорректно, причины пока неизвестны. Установка пароля В pproxy.php раскомментировать строчку, написать там свой пароль PHP код:
Код:
perl plocal.pl -px http://site.com/proxy/pproxy.php -pwd pproxypass1. Если вы хотите в качестве элемента цепочки узел SOCKS, то Privoxy поможет вам (см пример с Tor) 2. pproxy.php очень компактен и легко может быть внедрен в код сайта, Возможно это немного повысит ваш уровень анонимности. 3. Не стоит забывать что веб-серверы ведут логи и восстановить истинный источник нетрудно даже по цепочке;) 4. Альтернативный клиент(Delphi/Pascal) с открытым исходным кодом доступен тут http://dump.ru/file/3320224 Спасибо за совет: b3, AkyHa_MaTaTa |
эм...а прокси хттп\с или сокс?
|
http
Перенес в избранное. кстати. |
может как нить на https прикрутить можно?
|
нет, HTTPS тут реализовать почти невозможно. HTTPS прокси - он как и сокс основан на постоянном соединении и непрерывном обмене данными. А здесь, как видишь, обмен данными сводится к отсылке HTTP-запроса браузера и получению результата.
|
А оградить это дело от чужих глаз можно как-то? логин:пасс какой-нибудь.
Связка ActivePerl + Opera 9.62 + Proxy, дает в результате тормоза, не в курсе как это можно исправить? хттпс идет как я понял не через проксик, а через впн? |
Цитата:
Цитата:
|
дописал set_time_limit(0);
добавил авторизацию в самом простом виде. |
Подскажите пожалуйста, почему ActivePerl 5.10 так жестко начинает жрать память через минуту юзания проксика, заодно начинает жрать и браузер (опера и файрфокс, ведут себя одинаково). Как это исправить?
п.с. выкиньте с фиксом версию (сет тайм лимит + авторизация) |
да, память и процессорное время оно ест немилосердно, это расплата за небольшой размер скрипта.
Если слабая машина то могу предложить 1. Снизь приоритет выполнения процесса, это можно сделать в диспетчере задач. (процесс perl.exe) 2. Отключи многопоточность, тогда запросы будут выполняться последовательно и не так загружать процессор. закомментируй эти строчки Код:
...Код:
... |
так, а если залью скрипт в индекс сайта, по идее тяжело будет отпределить кто через них лазел и куда заходил?
|
в логах апача будет сохранен факт обращения к скрипту с твоего айпи и скорее всего User_Agent перла (User-Agent впрочем можно сменить)
То, куда ты обращался через этот скрипт возможно будет сохранено в логах файрволла сервера, это зависит от его настроек. |
Нашел себе счастье, спешу поделиться.
HTTPTunnel Цитата:
Portmapping, SOCKS4, SOCKS5, веб-админка, авторизация с мускула или ldap. http://sourceforge.net/projects/http-tunnel/ Все шустро работает и носки есть :) После ппрокси как-будто в летающую тарелку сел... п.с. искал в чем трабл этого скрипта (ппрокси), вроде как в том что use много используется |
Хостинг провайдер может как-то запалить, что я использую проксик, через него ?
|
Цитата:
|
Только есть маленький не достаток, пока perl не загрузит полность весь фаил он его не выдаст, и из-за этого такие тупки, кто знает к это можно исправить? (:
|
DIAgen могу предположить, только, сорри если не прав
в php есть команда flush... в перле нет аналогов? |
разве что переписать весь код, написаный с LWP на сокеты. Как время будет, может сделаю...
|
Почему ssl & socks нельзя?
Curl можно использовать |
SOCKS здесь вряд ли возможен исходя из самого механизма обращения к прокси.
То есть алгоритм такой: 1. perl-скрипт принимает HTTP-запрос и передает POST-параметром к php-скрипту 2. PHP-скрипт принимает POST-параметр и с помощью сокетов посылает целевому серверу, все что вернул ему сервер отправляет назад perl-скрипту для реализации обычного HTTP-запроса этого достаточно. Но SOCKS предусматривает создание постоянного канала, то есть многократный прием и передачу данных. А как передавать данные скрипту второй раз? При таком подходе это невозможно! HTTPS прокси или HTTP CONNECT прокси по сути тот же SOCKS-прокси, так как для подключения к HTTPS нужен сложный протокол - передача сертификатов и т.д. Но если цель не создание полноценного HTTPS-прокси а например просто зайти через прокси на сайт, расположенный на https то все же можно например придумать следующий алгоритм: 1. perl-скрипт принимает запрос как HTTP-прокси (!) и передает его POST-параметром PHP-скрипту 2. PHP-скрипт с помощью curl посылает этот запрос целевому серверу и т.д. в теории это возможно, но при этом возникает некоторые проблемы: - как браузер будет сообщать perl-скрипту что целевой хост именно на https а не на http - на сервере с PHP-прокси будет возникать проблемы c памятью - ведь PHP-скрипту необходмо сначала полностью принять результат и только потом он сможет передать результат и освободить занятую память. (подобно проблемам с памятью в текущей версии perl-скрипта) Плюс еще не на каждом сервере curl доступен P.S. Посмотрел исходник HTTPTunnel. Можно использовать IPC, тогда все проблемы сразу решаются... |
Цитата:
Платные никогда не отключают, т.к. сабж нужен большинству пользователей, которых им не хотелось бы терять. |
Цитата:
|
обновил plocal.pl, теперь LWP не используется.
Файл отдается клиенту по мере загрузки, т.е. памяти расходуется меньше. Старую версию можно найти здесь: http://slil.ru/26436538 |
Здравствуйте, а не подскажете как можно оптимизировать клиентскую часть, а именно plocal.pl чтоб была возможность хождения через прокси?
Ситуация следующая на работе закрыты все порты кроме 80, 21, 443, Интернет раздаётся через ISA-2007.... вот и есть нужда её обойти... ранеше делали тунель через SSH но по некоторым причинам перестали использовать.... так вот ближе к теме как сделать так чтоб клиенская часть ходили через местную проксю? ибо хоть и есть default getwey но там только 21 порт открыт.... Очень расчитываю на вашу помощь.... за ранее спасибо! |
могу посоветовать NTLM Authorization Proxy Server (написан на python)
например если настроить его на порт 5865 локалхоста то plocal надо запускать так: perl plocal.pl -px http://site.com/pproxy.php -tpx http://localhost:5865 скачать: http://sourceforge.net/projects/ntlmaps/ мануал по его настройке тут: http://www.linux.com/base/ldp/howto/Web-Browsing-Behind-ISA-Server-HOWTO-4.html |
Цитата:
P.S. А вот не мог бы ты ещё вот с какой вещью помоч, на linux'е реальзовал всё отлично работает, а вот как теперь сделать чтобы XP WORKSTATIONS могли ходить через linux по 8008 порту.... Ну грубо говоря чтоб была такая схема comp1(XP)->comp2(Linux, proxy 172.29.5.100:8008)->target Или к примеру QIP настроенный на proxy HTTP 172.29.5.100:8008 Просто такое подозрение что никсовая машина не пускает к себе.... |
Для того чтобы plocal.pl разрешал подключение к себе не только с локалхоста надо удалить в нем строчку, отмеченную красным:
Код:
... |
Кто подскажет как заюзать HTTPTUnnel? Чтото ниразберусь я никак :)
|
В общем,смог запустить прокси,автору респектище гиганское!
Но вот вопрос: Я в уторренте прописываю прокси, localhost 8008бв порт для кача,че писать? Свой открытый порт,или порт сервера?Чтото совсем не качацо :( Помогите пжалста.. |
если есть возможность - лучше переписать локальный скрипт на использование потоков, а не форков, производительность повысится
|
Цитата:
Цитата:
вот версия с потоками - http://slil.ru/26500515 |
а у мну траблы с кодировкой... %)
|
Цитата:
Код:
<?php |
bons, можно тебя спросить,когда ты будеш свободен и смогеш сделать сокс4-5 сервер,или хттпс.В общем чтоб с торентов качать можно было 8) А то я убился уже весь..сам скрипт смтрел,но никогда не работал с проксями,поэтому боюсь чтонибудь намудитьтам....воть.
|
когда будет время напишу версию pproxy для SOCKS.
Но m0Hze, ты уверен что в твоем случае нужно именно туннелирование через HTTP? Ведь это необходимо если файрволл запрещает открыть порт для прослушивания на сервере, а иначе подойдет обычный прокси, например 3proxy. |
Знаеш в чем вся проблема?) Я не знаю как настроить этот гребаный 3прокси на Фряхе.Совсем не знаю.На офф сайте етсть инструкция для настройки под меломягкую,а про никсы - ни слова. :)
Если ты можеш объяснить как настроить - то я с удовольствием приму твои советы. Но всеже для меня былобы безопаснее юхать тунелирование,так как меньшее палево на мой взгляд.Как никак,сервер Провайдера, :))))..... |
в Сети полно манов по по этому случаю
допустим 3proxy-0.5.3k.tgz - архив с 3proxy распаковываешь и компилишь: Код:
tar xvf 3proxy-0.5.3k.tgzКод:
socks -p55554Код:
./3proxy proxy.cfg >/dev/null & |
Один глупый вопрос =)
Получиться сокс5 или 4? коннект по 55554 порту? |
3proxy будет принимать подключения клиентов и 4-ой и 5-ой версий. По 55554 порту
|
Интересная тема. Тоже как-то делал такое. Прокси был на php, локальный туннель - на Delphi. Только у меня основной задачей было сжатие трафика. Использовал gzip. Для браузеров прозрачно, даже распаковывать не надо. В туннеле настраивалось качество картинок (если надо, прокси сжимал и их, понижая качество). Вместо swf подсовывалась заготовленная флэшка с надписью "BLOCKED BY PROXY". Да, еще прокси в хидерах передавал реальный и сжатый размер страницы, чтобы клиент мог вести статистику экономии. Это я так, может захочешь что-то подобное сделать
|
| Время: 07:57 |