Столкнулся с проблемой при такой реализации подмены контента: Перехватывается recv() из wsock32. В перехватчике вызываем оригинальную функцию с переданными ей параметрами, изменяем полученные данные в буфере, подсчитываем количество возвращенных байт с учетом изменений, которое возвратит (в eax) наш перехватчик. Изменение данных производится только при получении конкретной (заранее указанной) страницы. Изменяются только ссылки (причем "обрезанные" с начала или с конца пакета ссылки игнорируются) и повреждение html кода исключено. Просто отдельный пакет может вырасти (уменьшиться) в размерах, но это, как уже сказано, мы прочитываем. Все возвращаемые recv() данные, не содержащие html код передаются браузеру в первоначальном виде. - если следовать вышеописанному способу, то после подгрузки первого измененного пакета (при низкой скорости соединения это можно даже увидеть) браузер (был использован Internet Explorer) вылетает с ошибкой, мол "страница не найдена". Если не учитывать изменения и просто вернуть в качестве количества возвращенных байт оригинальное значение, то та же ошибка вылетает после загрузки примерно трети страницы (по разному - 5-го или 6-го измененного пакета, номера пакетов беру исходя из счетчика, прописанного в перехватчике). Само собой, необходимо, чтобы грузилась вся страница и желательно без ошибок - подскажите пожалуйста, где ошибка в моих выкладках? Может быть для IE важен определенный размер пакета?
Думаю дело в том, что от сервера приходит в заголовке ответа поле Content-Length: некоторое число, после чего IE видимо пытается читать ровно столько байт, сколько было в этом поле, но после ваших махинаций размер изменяется, вот IE и капризничает...
Сколько ни ломаю голову, кроме Content-Length ничего на ум не приходит. Есть какая-то другая причина, но уже потерял надежду самостоятельно ее определить. Неужели ни кто не интересовался ньюансами подмены? Помогите пожалуйста хоть ссылкой или намеком на особенности работы IE (а лучше браузеров вообще) с пакетами.