MAS>Подскажите куда двигаться
MAS>Нужно организовать мониторинг открытия всех сайтов любыми процессами, желательно получать записи вида: имя пользователя/имя процесса/имя сайта
Что подразумевается под "открытием сайтов"? HTTP-запросы? HTTPS? FTP? SMTP? ICMP?
В конце концов процесс может просто вызвать:
::ShellExecute(NULL, _T("open"), _T("http://ya.ru"), nullptr, nullptr, SW_SHOWNORMAL);
Будет проще советовать, если будет понятна конечная цель мониторинга.
MAS>Я так мыслю, что это можно сделать следующими путями (только как, пока не знаю):
MAS>1)мониторить DNS запросы (вроде как самый верный вариант)
Минусы варианта:
DNS запросы кэшируются (не на каждое открытие URL'а будет запрос)
нужно учесть, что часть процессов сами резолвят домены сокетами (имея, например, на борту c-ares), а другая часть делает RPC-вызов в svchost.exe (отдельный сервис), который и делает DNS-запрос
доменные имена резолвят не только для "открытия сайтов"
"открытие сайта" можно делать и по IP
MAS>2)мониторить web порты
Насколько критично внесение лага в работу системы?
Какие порты (все или набор)? В URL может быть указан нестандартный порт, например. А по стандартному 443 порту могут идти просто сырые зашифрованные данные (не HTTPS).
Как сопоставлять IP и домены, с учетом SHARED-хостингов?
Как именно будет реализован мониторинг (возможность написания драйвера, поддерживаемые версии ОС)?
MAS>3)мониторить журналы браузеров (но тут отпадают все остальные процессы, да и ведение истории посещения в браузере можно отключить)
Если допустимы приведенные оговорки, то может это тот самый верный вариант? Придется, правда, постоянно обновлять работу с браузерами — версии выходят часто. Так же возможны конфликты с работающими копиями браузеров (открытые без разделяемого доступа файлы, например).