2009-01-13 28 views
12

Czy istnieje sposób w C# lub C/C++ & Win32 do monitorowania wykorzystania sieci pewien proces (bez tej aplikacji budowany przez ciebie oczywiście)? Chciałbym monitorować tylko jeden proces przez około godzinę, a następnie zwrócić bajty używane tylko przez ten proces, na przykład przez limewire.Monitorować wykorzystanie sieci w procesie?

Czy to możliwe? Znam netstat -e w oknach powie Ci całkowitą liczbę bajtów wysłanych/odebranych, ale dotyczy to wszystkich procesów.

edit: Jeśli nie mogę zwrócić tylko jednego użycia procesów, jak mogę uzyskać bajty wysłane/odebrane przez cały system? jak wyświetla netstat oprócz tego, że chcę tylko liczby całkowite.

np

 
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 

Chcę tylko dostać 2 zmienne, jak rec = 2111568926 i wysłał = 1133174989

+0

których jeden pan pójść do Mike? – Greg

Odpowiedz

5

Można użyć do tego WinPcap lub napisać własny sterownik. Nie sądzę, aby istniały jakiekolwiek liczniki perfmonów na proces, które można wykorzystać.

5

Jest to możliwe, ale jeśli się nie mylę musisz utworzyć sterownik sieciowy do filtrowania całego ruchu sieciowego i nie dowiedzieć się, które proces stworzył ruch.

Firma Microsoft ma bezpłatną aplikację o nazwie Microsoft Network Monitor 3.2 (download). Według informacji o wydaniu ma również api do użycia.

Network Monitor API: Tworzenie własnych aplikacji do przechwytywania, analizowania i analizowania ruchu w sieci!

Here is a blog post about these API's.

Moim zdaniem należy korzystać z tej API (lub innego API, takich jak WinPcap) do filtrowania ruchu zamiast pisać swój własny sterownik.

Powiązane problemy