Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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.49 MB
Время: 0.014 c
2-1241507863
Zalum
2009-05-05 11:17
2009.06.21
Вызвать процедуру из другого модуля


2-1241619626
Maksas
2009-05-06 18:20
2009.06.21
Вопрос по Мемо


2-1241207260
бульдозер
2009-05-01 23:47
2009.06.21
CreateProcess определить готовность запускаемого приложения


15-1239947130
@!!ex
2009-04-17 09:45
2009.06.21
Распределение приоритетов для доустпа к сетевому каналу


4-1211700897
leonidus
2008-05-25 11:34
2009.06.21
Перетаскивание файла на иконку в трее