можно поставить собаку перед функцией explode Code: list($host, $port) = @explode(':', base64_decode($_POST['host']));
Здраствуите ! У меня такая проблемка : есть шелл на web server, xampp, но - listen port стоит 9600 а не 80. Пишу : C:\Documents and Settings\Admin>C:\strawberry\perl\bin\perl.exe C:\plocal.pl -px http://remote-IP:9600/pproxy.php и без результата.. . Как бы это поправить ? Спасибо
Попробуй В pproxy.php if(!$port)$port = 80; замени на 9600 В plocal.pl defined($pproxyport) || ($pproxyport = 80); на 9600
чтота незаметил етих строк до етого Да теперь запустился : # pproxyhost = remote-IP # pproxyport = 9600 # pproxyurl = /xampp/pproxy.php # bindport = 8008 теперь проблема с настройкой Brouser'a localhost:8008 , 127.0.0.1:8008 не работает :/
Насчот удалённой машини незнаю. удалось зальить шелл, и теперь питаюсь pproxy поставить . . . (think)
Хотелось бы реализовать сжатие на стороне сервера и распаковку принятых данных в клиенте. На сервере сжимаю в gzip, но как потом сделать декомпресс в клиенте? Кто-нибудь пытался сделать подобное?
у меня такая проблема не могу сделать цепочку в батнике: Code: perl D:\wamp\www\plocal.pl -px ссылка1 -pwd index perl D:\wamp\www\plocal.pl -px ссылка2 -pwd indexdirect -tpx http://localhost:8008 -bp 8009 в строке пишет # tunnelhost = localhost # tunnelport = 8008 # pproxyhost = ссылка2 # pproxyport = 80 # pproxyurl = соответственно путь к файлу2 # bindport = 8009 подключаюсь localhost:8009 пишет Could not connect to pproxy по отдельности все работает
Вот написал на C++ Builder'e локальную часть (plocal.pl). Но почему то тяжёлые сайты не грузит, хотя на перловой версии всё норм. Unin1.h Code: //--------------------------------------------------------------------------- #ifndef Unit1H #define Unit1H //--------------------------------------------------------------------------- #include <Classes.hpp> #include <Controls.hpp> #include <StdCtrls.hpp> #include <Forms.hpp> #include <IdBaseComponent.hpp> #include <IdComponent.hpp> #include <IdHTTP.hpp> #include <IdTCPClient.hpp> #include <IdTCPConnection.hpp> #include "IdCoderMIME.hpp" #include <IdCoder.hpp> #include <IdCoder3to4.hpp> struct HTTP_PROXY_DATA { AnsiString remote_script; WORD bind_port; unsigned int client_sock; }; //--------------------------------------------------------------------------- class TForm1 : public TForm { __published: // IDE-managed Components TMemo *Memo; TLabel *Label1; TEdit *EPort; TEdit *EScript; TButton *BStart; TIdEncoderMIME *Base64Encode; TMemo *Memo1; void __fastcall BStartClick(TObject *Sender); void __fastcall FormCreate(TObject *Sender); void __fastcall FormDestroy(TObject *Sender); private: // User declarations public: // User declarations __fastcall TForm1(TComponent* Owner); HTTP_PROXY_DATA proxy_data; }; //--------------------------------------------------------------------------- extern PACKAGE TForm1 *Form1; //--------------------------------------------------------------------------- #endif unit1.cpp Code: //--------------------------------------------------------------------------- #include <vcl.h> #include <winsock2.h> #pragma hdrstop #include "Unit1.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma link "IdCoderMIME" #pragma resource "*.dfm" TForm1 *Form1; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- DWORD WINAPI ProxyThread(LPVOID lpParam); //--------------------------------------------------------------------------- void ParseHeader(char *header, int header_size, TStringList *header_lst) { if(!header_lst) return; AnsiString header_key = "", tmp; for(int i = 0; i < header_size; i++) { if(header[i] != '\r' && header[i + 1] != '\n') header_key += header[i]; else { i++; if(!header_key.IsEmpty()) header_lst->Add(header_key); header_key = ""; } } } //--------------------------------------------------------------------------- AnsiString RemoveHeaderVal(TStringList *header_lst, TStringList *remove_key) { for(int i = 0; i < header_lst->Count; i++) { for(int j = 0; j < remove_key->Count; j++) { AnsiString rem; rem = remove_key->Strings[j]; if(header_lst->Strings[i].SubString(0, rem.Length() + 1) == (rem + ':')) { header_lst->Delete(i); i--; break; } } } return header_lst->Text + "\r\n"; } //--------------------------------------------------------------------------- AnsiString GetHeaderVal(TStringList *header_lst, AnsiString key) { AnsiString result; int flag = 0; for(int i = 0; i < header_lst->Count; i++) { result = header_lst->Strings[i].SubString(0, key.Length() + 1); if(result == (key + ':')) { result = header_lst->Strings[i].SubString(result.Length() + 1, header_lst->Strings[i].Length()); break; } } for(int i = 1; i < result.Length() + 1; i++) { if(result[i] == ' ') { flag++; break; } } result = result.SubString(flag + 1, result.Length()); return result; } //--------------------------------------------------------------------------- DWORD WINAPI ServerProxyThread(LPVOID lpParam) { HTTP_PROXY_DATA *proxy_data = (HTTP_PROXY_DATA *)lpParam; SOCKET serv_sock, client_sock; SOCKADDR_IN serv_addr, client_addr; HANDLE hThread; int res; //создаю серверную часть serv_sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); if(serv_sock == SOCKET_ERROR) return -1; serv_addr.sin_family = AF_INET; serv_addr.sin_port = htons(proxy_data->bind_port); serv_addr.sin_addr.s_addr = htonl(INADDR_ANY); res = bind(serv_sock, (sockaddr *)&serv_addr, sizeof(serv_addr)); if(res == SOCKET_ERROR) return -1; listen(serv_sock, 100); //MessageBox(0, proxy_data->remote_script.c_str(), 0, 0); //цикл для клиентов while(1) { int size; size = sizeof(client_addr); client_sock = accept(serv_sock, (sockaddr *)&client_addr, &size); if(client_sock == SOCKET_ERROR) break; proxy_data->client_sock = client_sock; hThread = CreateThread(NULL, 0, ProxyThread, proxy_data, 0, NULL); if(hThread == INVALID_HANDLE_VALUE) break; CloseHandle(hThread); } closesocket(serv_sock); return 0; } //---------------------------------------------------------------------------- DWORD WINAPI ProxyThread(LPVOID lpParam) { HTTP_PROXY_DATA *proxy_data = (HTTP_PROXY_DATA *)lpParam; SOCKET client = proxy_data->client_sock; int res, swap_len, cur; char header[1024]; AnsiString result_header, result_host, swap; TIdHTTP *tunnel = new TIdHTTP(Form1); TStringStream *result = new TStringStream(""); TStringList *post = new TStringList; TStringList *header_lst = new TStringList; TStringList *remove_key = new TStringList; //получаю хидер от браузера res = recv(client, header, sizeof(header), 0); if(res == SOCKET_ERROR || res == 0) return -1; ParseHeader(header, res, header_lst); //добавляю в хидер Connection: close header_lst->Insert(1, "Connection: close"); //удаляю ключи remove_key->Add("Proxy-Connection"); remove_key->Add("Keep-Alive"); result_header = RemoveHeaderVal(header_lst, remove_key); //получаю host result_host = GetHeaderVal(header_lst, "Host"); //перегоняю POST данные в base64 result_header = Form1->Base64Encode->Encode(result_header); result_host = Form1->Base64Encode->Encode(result_host); //с помощью TIdHTTP посылаю данные proxy.php post->Add("query=" + result_header); post->Add("host=" + result_host); tunnel->Post(proxy_data->remote_script, post, result); //посылаю результат обратно браузеру swap = result->DataString; swap_len = result->DataString.Length(); cur = 0; Form1->Memo1->Lines->Add(swap); while(swap_len > 0) { res = send(client, (swap.c_str() + cur), swap_len, 0); if(res == 0) break; else if(res == SOCKET_ERROR) { Form1->Memo->Lines->Add("Ошибка при передачи данных браузеру"); break; } swap_len -= res; cur += res; } delete tunnel, post, header_lst, remove_key, result; closesocket(client); return 0; } //---------------------------------------------------------------------------- void __fastcall TForm1::BStartClick(TObject *Sender) { HANDLE hThread; proxy_data.remote_script = EScript->Text; proxy_data.bind_port = EPort->Text.ToInt(); hThread = CreateThread(0, 0, ServerProxyThread, &proxy_data, 0, 0); if(hThread == INVALID_HANDLE_VALUE) { Memo->Lines->Add("Не могу создать поток"); return; } CloseHandle(hThread); } //--------------------------------------------------------------------------- void __fastcall TForm1::FormCreate(TObject *Sender) { WSADATA wsaData; if(WSAStartup(MAKEWORD(2, 2), &wsaData) != 0) { Memo->Lines->Add("WSAStartup error"); return; } } //--------------------------------------------------------------------------- void __fastcall TForm1::FormDestroy(TObject *Sender) { WSACleanup(); } //--------------------------------------------------------------------------- М.б кто найдёт баг вот исходники _http://slil.ru/29503509
Хороший скрипт и клиентская часть, но есть проблема: -Соединения в потоках могут надолго подвисать, особенно это заметно после закачки больших файла в несколько потоков. После того как файл закачался, все эти потоки, вместе с открытыми соединениями, продолжительное время висят в памяти, мешая дальнейшей работе и существенно снижая скорость передачи. Нашел похожий скрипт от программера из Калькуты,Arunava Bhowmickа называется India Web Proxy v1.0 Выделю несколько отличительных черт: -отслеживается конец передачи и своевременно завершаются соединения с сервером, благодаря этому потоки не весят долгое время в памяти. -Есть поддержка HTTP и HTTPS. -Клиентская часть выполнена на Java, следовательно пойдет во многих ОС. -Три уровня логирования, лог можно отключить совсем, что и рекомендуется сделать. -Можно включать шифрование трафика между нами и скриптом. Принцип действия тот же, закидываем на сервер скрипт. Запускаем программу, настраиваем, прописываем HTTP и SSL прокси в браузере и вперед. Все очень понятно и по шагам описано здесь. Тестируем и отписываемся у кого как работает, что можно улучшить, доработать.
Долго искал пхп проксик на хост и все таки нашел. Мне понравилось круто сделанно. PHP Secure proxy - программа для туннелирования HTTP/HTTPS трафика через PHP-гейт. На написание меня подтолкнула идея bons'a, в реализации которого не было необходимого мне функционала, и самое главное, GUI. [ Возможности ] [+] Поддержка HTTPS для php-гейтов. [+] Туннелирование HTTPS трафика (добавлено в версии 1.1.0) [+] Возможность установки пароля на гейт. [+] Возможность работы с гейтом через SOCKS5 прокси. [+] Работа с гейтом происходит исключительно с помощью метода GET, что обеспечивает защиту от обнаружения по лог-файлам сервера. [+] Возможность установки Cookies, передаваемых при обращении к гейту. Это полезно при сокрытии кода гейта в файлах сайта. Формат: "mycookie=value; mycookie2=123;" [+] Обработка каждого соединения происходит в отдельном потоке. [+] Возможность скачивания и закачивания неограниченно больших файлов (в случае невозможности обхода ограничения set_time_limit() скачивание файлов возможно за несколько раз при условии поддержки докачки со стороны целевого сервера). [+] Механизм препроцессинга запросов оптимизирует работу под HTTP 1.0. [+] Наличие шифрования со случайным ключом (шифрование чисто символическое, чтобы скрыть трафик от любопытных глаз); все данные, включая пароль от гейта, передаются в зашифрованном виде. Включение/выключение шифрования не требует правки кода гейта. [+] Возможность работы сразу с несколькими гейтами. В этом случае за каждым гейтом закрепляется определённый User-Agent (назначаемый случайно), что не позволит на целевом сайте связать воедино запросы от разных гейтов. [+] Возможность выбора интерфейса для прослушивания. [+] Подробная статистика по сетевым соединениям, имеются разные уровни профилирования запросов (причём никакие логи не пишутся в файлы). [+] Ключи запуска: -tray - сворачивает окно в трей при запуске. -start - автоматически инициализирует прокси. Для запуска вместе с системой добавьте в Автозапуск ярлык "[dir]\VPSProxy.exe -tray -start" -hidden - делает то же самое что и -tray, плюс скрывает иконку из трея. [ Краткое руководство ] 1. Закачиваем на сайт файл gate.php (пароль по умолчанию - "123"). 2. В программе добавляем URL на залитый гейт и пароль/cookies, если нужно. Выбираем его галочкой Use. 3. Порты и интерфейс для прослушивания в большинстве случаев можно оставить по умолчанию. 4. Нажимаем кнопку Start и настраиваем браузер на работу через проксиlocalhost:2222 (HTTP) и localhost:2223 (HTTPS). 5. Прокси должен заработать. Пробуем зайти на internet.yandex.ru. Проверял на: http://leader.ru/secure/who.html http://www.anonymize.net/current-ID.phtml http://ipid.shat.net Ссылка: http://grabberz.com/showthread.php?p=300168
Все это можно было не писать, а скинуть ссылку на тред: https://forum.antichat.ru/thread227973.html который кстати находится по соседству
спасибо автору за скрипт.долгое время пользовался.к сожалению из-за отсутствия https пришлось перейти на VPSproxy. но т.к. была острая необходимость в подобном скрипте пришлось выучить и разобраться в PHP и Perl`е.Жирный плюс.