Как прослушивать запросы браузера (прокси, аддон)?

Я хотел знать, как лучше всего написать агент на платформе Win, который сможет отслеживать связь браузера.

сценарий: отслеживать доступ пользователей к предопределенным URL-адресам в Chrome, FireFox и IE. При каждом обращении я отправляю статистику на сервер с некоторыми данными (заголовок страницы).

Способы, которые я нашел до сих пор, — это прокси-сервер и надстройки браузера. Каждый из них имеет свои преимущества и недостатки. Основным недостатком прокси-способа является обработка связи HTTPS. Недостатком аддона является установка (нужно устанавливать в каждом браузере) и кроссбраузерность.

Есть ли другой способ? какую-нибудь службу, которую я могу написать с помощью .net, которая автоматически подключается к браузеру при его запуске?

Спасибо.


person user1283002    schedule 21.03.2012    source источник
comment
на рынке доступно множество приложений, таких как http sniffer и т. д. почему вы не используете ни одно из них?   -  person Karthikeyan Arumugam    schedule 21.03.2012
comment
Спасибо, но мне нужно написать его самому и добавить немного функциональности. Имеющиеся снифферы для этого не подходят.   -  person user1283002    schedule 21.03.2012


Ответы (1)


У вас есть только два варианта — использовать http-прокси или написать плагин для каждого браузера. Этот подключаемый модуль может просто пересылать данные по сети в центральную службу, оставляя вам задачу создать общий набор данных, который могут предоставить все браузеры, а также изучить все модели подключаемых модулей.

Однако, на мой взгляд, единственным реальным вариантом является прокси-сервер HTTP (s), потому что в противном случае вам придется обновлять свои плагины каждый раз, когда меняются браузеры, или иметь дело с тем фактом, что новые браузеры могут появиться и использоваться.

Конечно, вы не найдете событие «пользователь просматривает URL-адрес в каком-то браузере» в ОС - все, что она знает, это то, что на каком-то локальном порту было открыто сокетное соединение с портом 80/443 удаленного сервера (или что-то еще).

Поэтому я настоятельно рекомендую опираться на превосходную работу, стоящую за Fiddler, и использовать Fiddler Core.

http://www.telerik.com/fiddler/fiddlercore

Для https вы должны расшифровать и повторно зашифровать с другим сертификатом. Нужная вам информация просто недоступна без фактической распаковки запроса. Fiddler достигает этого, открывая собственный туннель SSL к целевому серверу от имени клиента, действуя при этом как сервер SSL для клиента под другим сертификатом. Пока клиент полностью доверяет используемому сертификату, проблем не возникает.

Тем не менее, это означает, что пользователь не может лично проверить идентификацию целевого сайта, поэтому вашей системе придется предположить наихудший сценарий для любых недействительных сертификатов SSL и заблокировать соединение.

person Andras Zoltan    schedule 21.03.2012
comment
Спасибо, это допустимый вариант, но я хочу избежать прерывания SSL. Я стараюсь быть максимально прозрачным (за исключением начальной установки). - person user1283002; 21.03.2012
comment
Ну, у вас может просто не быть прослушивателя SSL - можно утверждать, что вам все равно не следует устанавливать что-то, что может перехватывать пользовательский SSL-трафик. Если вы не заинтересованы, вам придется писать плагины для каждого браузера. - person Andras Zoltan; 21.03.2012
comment
Прослушиватель SSL обязателен, меня не волнуют ни передаваемые данные, ни параметры GET/POST — только URL и заголовок страницы. Я надеялся, что в Win есть какой-то механизм событий, который позволяет мне получать уведомления, когда что-то подключается любым браузером. - person user1283002; 22.03.2012
comment
Как я уже сказал, вы можете использовать прослушиватель SSL, но единственный способ получить URL-адрес — это расшифровать его и повторно зашифровать с помощью другого сертификата, все данные запроса находятся за пределами целевого IP-адреса. и порт хранится внутри запроса. В ОС нет события «просмотр URL-адреса» - это трафик http (s), и все. Вы должны написать прокси ИЛИ плагин для каждого браузера, это два ваших варианта. - person Andras Zoltan; 22.03.2012
comment
Я боялся этого, очень надеялся, что я что-то упустил. Теперь мне приходится выбирать между разработкой для каждого браузера (есть фреймворки, которые могут помочь) или более навязчивым использованием прокси-подхода. Большое спасибо за вашу помощь и предложения. - person user1283002; 22.03.2012