Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737 Форумы портала PHP.SU :: Самодельный полноценный http(s) прокси на php!
Покинул форум
Сообщений всего: 7
Дата рег-ции: Февр. 2011
Помог: 0 раз(а)
Понадобилось сделать скрипт самодельного прокси. Полностью автономного и без клиентов. Не обладая глубокими познаниями, я провозился недели две, изучая принципы работы. Просьба не ругать, если увидете что-то "кустарного" мыслепроизводства в нём)
Собственно чем занимается скрипт - он не просто отправляет пакеты от платёжной программы на саму платёжную систему, а ищет совпадения URL в пакете, и если находит, то отправляет пакеты на другую платёжную систему. Это уже работает, вопрос, как сделать так, чтобы если какие то обновления платёжная программа закачивала, то у неё получалось это сделать по HTTPS и по ftp
Скажу сразу, сей код реально работает, всё что по http он тянет.
Для работы, в апаче пришлось сделать виртуальный хост написав такое:
То есть мы указали апачу, что наш прокси-скрипт будет на 8080
Далее в .htaccess (который в C:/vip-site/www/proxy) прописал такое:
Options MultiViews
Order deny,allow
allow from all
DirectoryIndex 1.php
RewriteEngine on
Options +FollowSymlinks
RewriteRule ^(.*)$ 1.php [L,QSA]
Методом тыка, я выяснил что именно такое позволяет направлять апачу всё в 1.php, кроме совсем уж кривых запросов типа
GET http://www[dot]tns-counter[dot]ru/V13a**[dot][dot][dot]msec=yandex_ya/0 HTTP/1.0" 403 247
Как сей баг в апаче решить не знаю, он пишет в логах ошибок что данный путь содержит шаблонные символы и вообще не передаёт скрипту ничего)
Теперь сам скрипт, кстати, работает он и с оперой и с IE (В целях отладки- наблюдения, постоянно добавляются записи в файл лог с уникальным именем)
fwrite($crack_log_otkr," прокси отослал такое что ниже на $host, порт $server_port\r\n\r\n$out ==== \n\n ответ ему пришёл такой: \r\n");// запись в лог файл ;
Признаю, что всё это выглядет в черновом виде, писалось на скорую руку, букв много, но это для http работает. Что добавить, чтобы и для https работало?
Покинул форум
Сообщений всего: 1389
Дата рег-ции: Окт. 2010
Помог: 42 раз(а)
Михаил_25, оформи сообщение понормальному неудобно читать код.
Михаил_25
Отправлено: 11 Марта, 2011 - 22:03:40
Новичок
Покинул форум
Сообщений всего: 7
Дата рег-ции: Февр. 2011
Помог: 0 раз(а)
перерыв кучу информации по php, склоняюсь к мысли что https прокси написать невозможно. Ввиду того, что скрипт не может получать данные от инициатора после начала работы скрипта
OrmaJever
Отправлено: 11 Марта, 2011 - 22:26:54
Активный участник
Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010 Откуда: Чернигов
Помог: 299 раз(а)
Михаил_25 пишет:
перерыв кучу информации по php, склоняюсь к мысли что https прокси написать невозможно.
Ну в теории возможно. https отправляет даные также только в зашифрованом виде, тоесть даные нужно взять и перенаправить куда нужно.
----- Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
Михаил_25
Отправлено: 12 Марта, 2011 - 01:45:00
Новичок
Покинул форум
Сообщений всего: 7
Дата рег-ции: Февр. 2011
Помог: 0 раз(а)
OrmaJever пишет:
Ну в теории возможно.
Думается, в теории как раз и не возможно) Если тока не сделать скрипт, который "вечно" висит, слушая через локальный порт всё что приходит и анализируя всё, а затем открывая по запросу ещё сокет с назначением и постоянно читая один и другой и записывая ответы в эти же сокеты. На данный момент, познакомился с проксомитроном (proxomitron) , сильная вещь оказалась
ещё выяснил, что $content = file_get_contents("php://input"); не позволяет в ряде случаев получить полностью картину пришедшего POST, оригинальная безнадёжно теряется если есть заголовок мультиформа (Добавление)
OrmaJever пишет:
тоесть даные нужно взять и перенаправить куда нужно
В этом то и загвоздка, что браузер шлёт просто CONNECT и ожидает, а секретные данные шлёт уже после начала работы скрипта, то есть когда PHP их уже не "читает".
Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009
Помог: 17 раз(а)
Михаил_25 пишет:
Если тока не сделать скрипт, который "вечно" висит, слушая через локальный порт всё что приходит и анализируя всё, а затем открывая по запросу ещё сокет с назначением и постоянно читая один и другой и записывая ответы в эти же сокеты
Осуществление решения предполагаемой задачи может быть достигнуто на основании использование deamon-приложения, которое обеспечивает непрерываное выполнение единой инстанции и поддержание оригинального объекта socket-а сетевого соединения; в качестве технологии позволяющей осуществить целевую реализацию PHP-приложения с сохранением локальной исполняемой инстанции, допустимо использование средств интерфейса FastCGI по ассоциативной передаче с URL-адресов пользовательских информационных полей в целевой исполняемое серверное приложение
----- Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.