Главная страница
    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.46 MB
Время: 0.006 c
15-1239655688
Petr V. Abramov
2009-04-14 00:48
2009.06.21
TUser - с днюхой


2-1241429434
apic
2009-05-04 13:30
2009.06.21
rave


2-1240482954
Franzy
2009-04-23 14:35
2009.06.21
Запускаю из среды - нет ошибки. Запускаю ехе - есть :(((


2-1241082971
Гость
2009-04-30 13:16
2009.06.21
Позиционирование на записи в cxGrid


1-1207045289
dmitry_12_08_74
2008-04-01 14:21
2009.06.21
Как проверить при запуске программы, есть ли уже запущенная копия





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский