Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 2009.06.21;
Скачать: [xml.tar.bz2];

Вниз

Отловить открытие (закрытие) соединения   Найти похожие ветки 

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.006 c
15-1239864485
Дмитрий С
2009-04-16 10:48
2009.06.21
Куда сохраняется содержимое видеопамяти во время спящего режима?


2-1241512085
bagos
2009-05-05 12:28
2009.06.21
sql запрос с join


15-1239690431
начинающий
2009-04-14 10:27
2009.06.21
Лечение вирусов на NTFS-разделах


15-1239446512
Копир
2009-04-11 14:41
2009.06.21
А вот вопрос про принтер?


2-1241465604
ford
2009-05-04 23:33
2009.06.21
Ошибка при освобождении памяти выделенной переменной Pointer





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский