Текущий архив: 2009.06.21;
Скачать: CL | DM;
Вниз
Отловить открытие (закрытие) соединения Найти похожие ветки
← →
Strate (2008-02-22 12:34) [0]День добрый.
Как можно в системе отловить создание/разрушение соединения какого-то процесса в системе?
т.е. грубо говоря в момент начала сетевой активности моей программе приходит сообщение об этом.
Сейчас я эту задачу выполняю так:
1. Отлавливаем сниффером все пакеты, проходящие через интерфейс. Соответственно получаем LocalAddress, LocalPort, RemoteAddress, RemotePort, direction. (уже сделано, работает на ура)
2. С помощью GetExtendedTCPTable получаем список активных соединений, в списке присутствует pID процесса для каждого соединения.
3. Сравниваем наш пакет с таблицев, находим процесс, которому пришёл данный пакет.
4. Пишем лог.
Всё работает тоже отлично, но при скорости передачи данных ~8 мегабит программка начинает давать неслабые тормоза, т.к. происходит частый вызов GetExtendedTCPTable (с отключенной функцией определения имени процесса для каждого пакета загрузка процессора не более 3%, с включенной - не менее 50%). Собственно пришла идейка вызывать функцию только тогда, когда в системе появляется или пропадает сетевое соединение, вот интересно как это можно cделать.
Поможете?)
← →
Сергей М. © (2008-02-22 12:56) [1]
> Strate (22.02.08 12:34)
О каких соединениях ты ведешь речь ?
← →
Strate (2008-02-22 14:37) [2]
> О каких соединениях ты ведешь речь ?
сетевые соединения. Можно сказать список открытых ллокальных сокетов.
P.S. Список можно посмотреть по "netstat -n -b"
← →
Сергей М. © (2008-02-22 14:54) [3]
> список открытых ллокальных сокетов
Это далеко не сетевая активность.
← →
Strate (2008-02-22 15:29) [4]
> Это далеко не сетевая активность.
А что это? Без этого не понятно что мне надо?
← →
Сергей М. © (2008-02-22 15:33) [5]
> что это?
Это просто "список открытых ллокальных сокетов" и не более того.
А сетевая активность - это собственно прием/передача информации через сетевые интерфейсы.
← →
Strate (2008-02-22 16:19) [6]Тогда мне надо событие (сообщение, нотификация), которое возникает при открытии нового сокета в системе.
← →
Сергей М. © (2008-02-22 16:21) [7]Зачем ?
Прием/передача через интерфейс и есть сетевая активность. И это отслеживается сниффером. Зачем тебе какие-то там сокеты ?
← →
Strate (2008-02-22 16:29) [8]ммм... я хочу по пришедшему мне пакету определять имя экзешника (если возможно) которому этот пакет пришёл. Я это сделал, но неэффективно, т.к. при каждом пакете вызывается GetExtendedTCPTable, что достаточно тормозит программу. (~50% времени процессора), причём больше чем уверен что бОльшая часть вызовов вхолостую - таблица активных процессов (выход функции GetExtendedTCPTable) не меняется (если к примеру качать файл каким-нить даунлоад-менеджером). Так вот ммне нужно что-то вроде события, которое возникает при появлении нового процесса (при открытии нового соединения уже сущетвующим процесом (например новый поток той же закачки)), дабы по этому событию вызывать GetExtendedTCPTable. Вот )
Возможно такое?
← →
Сергей М. © (2008-02-23 11:29) [9]
> события, которое возникает при появлении нового процесса
Это возможно реализовать только в драйвере решима ядра, на wasm.ru есть соотв.статья с примером
Страницы: 1 вся ветка
Текущий архив: 2009.06.21;
Скачать: CL | DM;
Память: 0.46 MB
Время: 0.053 c