EmbeddedWB, как не загружать с другого домена

 
0
 
Delphi, Kylix & Pascal
ava
lollollollol | 21.03.2013, 21:51
Снова всех приветствую.

Добился стабильной работы от EmbeddedWB, избавился от утечки памяти, и похоже осталась финальная загвоздка.
Сайт, который загружается в EmbeddedWB подгружает какие-то картинки и js с другого домена, но тот домен по неизвестным причинам не работает.
Результат - долго пытается загрузить страничку.

Я хочу сделать так, чтобы EmbeddedWB не загружал никаких файлов со сторонних доменов.
Например я открываю сайт http://vasya.com/
На этом сайте выполняется загрузка картинок,js,css не только с домена http://vasya.com/, но и с http://blabla.com/
Нужно сделать чтобы загрузка скриптов и картинок выполнялась только с домена http://vasya.com/.

Посмотрел все свойства компонента, ничего не нашел. Подскажите в каком направлении копать, я что-то даже в юнитах компонента не нашел кода загрузки скриптов и картинок, хотел прям там условие прописать.

Прошу помощи, кто чем может
Comments (14)
ava
lollollollol | 21.03.2013, 22:15 #
Ничего в голову не приходит... Можно конечно создать socks на 127.0.0.1:Любой порт, настроить работу через прокси, и уже на уровне прокси фильтровать куда пускать запрос, но я считаю это уже изврат высшей степени.

Должна быть другая возможность решить проблему
ava
lollollollol | 22.03.2013, 19:29 #
Ещё думал может изменить html таким оразом, чтобы там небыло ссылок на другие домены, но ведь браузер вначале всё загружает
ava
lollollollol | 23.03.2013, 06:30 #
Я вот подумал, может быть можно достучаться до функций которые выполняют парсинг ссылок перед тем как браузер начнёт грузить необходимые файлы, прописаные в html? Не удаётся найти, есть ли смысл копать  этом направлении, или за это ядро IE отвечает?
ava
Чучмек | 25.03.2013, 08:35 #
Цитата (lollollollol @  23.3.2013,  06:30 findReferencedText)
Я вот подумал, может быть можно достучаться до функций которые выполняют парсинг ссылок перед тем как браузер начнёт грузить необходимые файлы, прописаные в html

Перехвати gethostbyname (getaddrinfo) и connect из WS2_32.dll
ava
lollollollol | 25.03.2013, 20:01 #
Эт как перехватить? Я ради интереса делал подобное год назад, но я там свою функцию перехватывал:
Менял адрес вызова функции, и выполнял свою функцию
Сейчас попробую так сделать. Или существуют стандартные методы перехвата, чтото типа дополнительного uses?
ava
Чучмек | 25.03.2013, 20:10 #
Цитата (lollollollol @  25.3.2013,  20:01 findReferencedText)
чтото типа дополнительного uses

Можешь пока воспользоваться моим.

uses ...,FunctionPatch;
...
function old_connect(s: TSocket; var name: TSockAddr; namelen: Integer): Integer; stdcall;
asm
db '000000000000000000000000000000000000000000000000';
end;
function my_connect(s: TSocket; var name: TSockAddr; namelen: Integer): Integer; stdcall;
begin
Result:=old_connect(s,name,namelen);
end;
...
begin
Patch('WS2_32.dll','connect',@my_connect,@old_connect);
...


ava
lollollollol | 25.03.2013, 20:49 #
Спасибо, завтра отпишу что получилось
ava
lollollollol | 26.03.2013, 08:09 #
Спасибо большое!

Как появилось время сразу решил сделать, и всё получилось.
Правда мне удобнее было перехватывать функцию getaddrinfo, сделал по Вашему примеру, всё сразу заработало так как и ожидалось!

Ещё раз большое спасибо!
ava
Чучмек | 26.03.2013, 09:14 #
Цитата (lollollollol @  26.3.2013,  08:09 findReferencedText)
Правда мне удобнее было перехватывать функцию getaddrinfo

IE6 использует gethostbyname. Для совместимости необходимо перехватывать и эту функцию.
ava
lollollollol | 26.03.2013, 16:06 #
у меня ие8, getaddrinfo работает, если я сделаю gethostbyname, на ие 8 тоже будет работать?

ava
Чучмек | 26.03.2013, 16:39 #
Цитата (lollollollol @  26.3.2013,  16:06 findReferencedText)
на ие 8 тоже будет работать
 если только getaddrinfo - нет.
Необходимо перехватывать обе функции.

added later:
Какой алгоритм используешь?
ava
lollollollol | 26.03.2013, 16:46 #
Поясни принцип работы, а то чтото торможу.

Вот есть 3 функции,


function old_gethostbyname(name: PChar): PHostEnt; stdcall;
asm
  db '000000000000000000000000000000000000000000000000';
end;

function old_getaddrinfo(nodename, servname: PChar; hints: paddrinfo; var res: paddrinfo): integer; stdcall;
asm
  db '000000000000000000000000000000000000000000000000';
end;

function old_connect(s: TSocket; var name: TSockAddr; namelen: Integer): Integer; stdcall;
asm
  db '000000000000000000000000000000000000000000000000';
end;


Что происходит когда они вызываются?
ava
Чучмек | 26.03.2013, 17:04 #
Цитата (lollollollol @  26.3.2013,  16:46 findReferencedText)
Строка   db '000000000000000000000000000000000000000000000000'; за что отвечает?

Резервирует место
ava
lollollollol | 26.03.2013, 17:26 #
Цитата


По адресу перехватываемой функции записывается переход на my_function

По адресу old_function переносится часть кода из перехватываемой, которая затирается переходом, и переход на оставшийся код. 


Да, сам алгоритм я понял, меня смутило то что во всех случаях одна строка кода выполняется
Please register or login to write.
Firm of day
Вы также можете добавить свою фирму в каталог IT-фирм, и публиковать статьи, новости, вакансии и другую информацию от имени фирмы.
Подробнее
Contributors
advanced
Submit