Приветствую всех, возник вопрос такого плана: Написал простенький web-сервер на Delphi для того чтобы попробовать обмануть одну из флешек в контакте. Через сниффер узнал реальный адрес сервера приложения, забил его в файл hosts операционки, для того чтобы все вызовы из приложения посылались уже на мой сервер а не на реальный, написал обработку запросов и фильтрацию оных прямо в моем приложении (сервере), чтобы приложение не догадалось о том что оно общается не с настоящим сервером, а получала полноценные адекватные ответы от сервера. Вся заморочка возникла когда попытался из своего сервера отправить откорректированный запрос на реальный сервер приложения. Так как в файле hosts, прописан уже автоматический редирект на мой сервер а не на реальный, то походу мой сервер с реальным связаться не сможет и будет получать свои же перенаправленные (файлом hosts) запросы. Подскажите пожалуйста как можно решить данную проблему ? Почитал про перехват всех соединений через инжект длл'кой в браузер и установкой хука, но там долгая очень история, слишком большой велосипед придется изобретать. Да и знаю что некоторые флешки открывают свои соединения на вообще левых портах. Web дебагеры и снифферы можете не предлагать, так как в некоторых приложениях есть переменная TIMESTAMP, и никакой web дебаггер уже в этом случае не прокатит. Так как реальный сервант будет будет сливать такие соединия. Пробовал пользоваться Fiddler'ом вторым но там мне не хватает функций фильтрации и обработки данных. Пробовал Proxomitron, но там фильтры только на заголовки, фильтров POST запросов нету, вернее они есть, но их функциональности мне к сожалению не хватает, да и опять же будет проблема коннекта к серверу по левому не стандартному порту из флешь-приложения. Очень надеюсь на Вашу помощь, и выражаю большую благодарность за внимание к посту а так же огромную благодарность за любую помощь в этом вопросе.
hosts отвечает за резолвинг имени сервера в его ип адрес. Cоответственно, чтобы в него не "упираться", нужно делать запрос напрямую по IP. Если это http протокол, то нужно еще не забывать про параметр Host в запросе(в него оригинальный домен).
ах да, точно.... Забыл, вернее почему-то не подумал что из своего сервера уже могу обращаться именно по IP'шнику сервера реального. Спасибо, добавил репы, но почему-то не плюсанулось =( Еще раз спасибо, буду пробовать.
Тренируюсь на ya.ru. Возник второй вопрос, при получении IP ya.ru получаю - 93.158.134.3. самое интересное то что при получении страницы http://93.158.134.3/ получаю исходник страницы хоста http://yandex.ru/ (то есть полная версия сайта) если же получаю исходник страницы http://ya.ru/ (упрощенная версия сайта) - то все ок. Сам вопрос, получаю IP YA.RU, сокращенной версии сайта, по этому IP запрашиваю страницу - ан отдает полную. Думаю посмотреть, может там какой-то редирект... Или что-то другое... Может кто уже с этим работал ? при запросе указываю Host т.к. на одном айпишке может быть много сайтов Code: var str:ansistring; begin http1.Request.Host:='ya.ru'; str:=http1.get('http://93.158.134.3/'); str:=utf8toansi(str); memolog.Lines.Add(str); end; пробовал хост указавать и с www. результата нет.
мне почему-то кажется что Host не выставляется в запрос(не могу проверить, тк делфи нет) Сравни снифером запросы на ya.ru просто через домен и как у тебя сейчас. Должно проясниться.
да, точно так и есть, уже до вас выяснил при сниффинге запроса строку хост вообще можно не писать, то что в гете указано, туда запрос и идет, указание хоста ваще на запросе никак не отражается. Возможно отразится если запрос в Tstream писать (без указания переменной впереди). Так что в моей проблеме пока нормального решения нету =(
составляй запрос сам и посылай его через сокеты. Хотя это странно, что idhttp никак не дает возможности переназначить это поле...
Его можно переназначить, если GET - запрос другого вида делать. А я об этом только после снифа вспомнил, когда логи увидел. Через сокеты - думаю тоже не спасет, так как резолвинг срабатывать будет (файл HOSTS), если я не ошибаюсь, хотя и проблем с этим возникнуть не возникло бы, уже писал что-то, давно правда...
Через сокеты резолвинг срабатывать не будет, т.к. ты самостоятельно формируешь структуру данных отправки и прописываешь туда IP или доменное имя и выставляешь заголовки запроса. Из GET-запроса никаких данных для определения виртуального хоста веб-сервер не делает. Т.е. варианта 2: 1) использовать низкоуровневые вещи (сокеты) и самостоятельно корректно заполнять структуру данных 2) использовать высокоуровневый класс для обмена данных с веб-сервером и внимательно читать документацию по нему. Не верю, что нельзя менять заголовок "Host"
Спасибо большое за наводку, буду в ту сторону тогда копать... Где-то многолетний исходничек сокетовый остался еще (все посл время спасали компоненты). Насчет Host опишу фишку: если в файлстрим файл писать получается: Code: http1.Request.Host:='ya.ru'; http1.get('http://93.158.134.3/', FS); запрос будет выглядеть так а если писать данные сразу в переменную ansistring: Code: http1.Request.Host:='ya.ru'; ansistr:=http1.get('http://93.158.134.3/'); запрос будет выглядеть так как видите сами - переменная HOST в запросе Indy 10 не играет... В этом вся и проблема.