Контролировать использование сети процессом? - PullRequest
13 голосов
/ 13 января 2009

Есть ли способ в C # или C / C ++ & Win32 контролировать сетевое использование определенного процесса (очевидно, что это приложение не было создано вами)? Я хотел бы отслеживать только один процесс в течение часа или около того, а затем вернуть байты, используемые только этим процессом, таким как limewire, например.

Возможно ли это? Я знаю, что netstat -e в Windows сообщит вам общее количество отправленных / полученных байтов, но это для всех процессов.

edit: Если я не могу вернуть использование только одного процесса, как я могу получить байты, отправленные / полученные всей системой? как показывает netstat, за исключением того, что я просто хочу целые числа.

например:

netstat -e

                           Received            Sent

Bytes                    2111568926      1133174989
Unicast packets             3016480         2711006
Non-unicast packets            3122            1100
Discards                          0               0
Errors                            0               0
Unknown protocols                 0

Я просто хочу получить 2 переменные, например, rec = 2111568926 и sent = 1133174989

Ответы [ 4 ]

5 голосов
/ 13 января 2009

Это возможно, но если я не ошибаюсь, вам придется создать сетевой драйвер для фильтрации всего сетевого трафика и выяснить, какой процесс создал трафик.

У Microsoft есть бесплатное приложение под названием Microsoft Network Monitor 3.2 ( download ). Согласно примечаниям к выпуску, у него также есть API для использования.

API сетевого монитора: создайте свой собственный приложения, которые захватывают, анализируют и анализировать сетевой трафик!

Вот запись в блоге об этих API .

По моему мнению, вам следует использовать этот API (или другой API, такой как WinPcap) для фильтрации трафика вместо написания собственного драйвера устройства.

5 голосов
/ 13 января 2009

Вы можете использовать WinPcap для этого или написать свой собственный драйвер устройства. Я не думаю, что есть какие-то счетчики perfmon для каждого процесса, которые вы можете использовать.

3 голосов
/ 12 апреля 2012

Я задал тот же вопрос на форуме MSDN и получил ответ. Откровенно говоря попробовал это. То есть попробовал но не так сильно)) Было предложено использовать ETW. Я не понимал, как правильно использовать события ETW. http://social.msdn.microsoft.com/Forums/en-US/perfmon/thread/b82da95a-1c18-49ce-9bfa-e3d79ec40907

0 голосов
/ 13 января 2009

NetLimiter 2 Limiter

Монитор сетевого трафика Вы можете получить последнюю бесплатную версию с здесь

...