2009-01-13 8 views
12

Gibt es einen Weg in C# oder C/C++ & Win32, um die Netzwerknutzung eines bestimmten Prozesses zu überwachen (Ohne dass diese Anwendung natürlich von Ihnen erstellt wird)? Ich möchte nur 1 Prozess für ungefähr eine Stunde oder so überwachen und dann die Bytes zurückgeben, die nur von diesem Prozess verwendet werden, wie zum Beispiel Limewire.Überwachung der Netzwerknutzung eines Prozesses?

Ist es möglich? Ich weiß netstat -e auf Windows wird Ihnen sagen, insgesamt Bytes gesendet/empfangen, aber das ist für alle Prozesse.

edit: Wenn ich nur eine Prozessverwendung zurückgeben kann, wie bekomme ich die Bytes gesendet/empfangen durch das gesamte System? wie Netstat zeigt an, außer ich will nur die ganzen Zahlen.

zB:

 
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 

Ich möchte nur zwei Variablen erhalten, wie rec = 2111568926 und gesendet = 1133174989

+0

Welchen hast du Mike gemacht? – Greg

Antwort

5

Sie WinPcap dafür verwenden könnte oder Ihre eigenen Gerätetreiber schreiben. Ich glaube nicht, dass es pro Prozess Perfmon Zähler gibt, die Sie nutzen können.

5

Es ist möglich, aber wenn ich mich nicht irre, müssen Sie einen Netzwerktreiber erstellen, um den gesamten Netzwerkverkehr zu filtern und dann herauszufinden, welcher Prozess den Datenverkehr erzeugt hat.

Microsoft hat eine kostenlose Anwendung namens Microsoft Network Monitor 3.2 (download). Laut den Release Notes hat es auch eine API zu verwenden.

Network Monitor API: Ihre eigenen Anwendungen erstellen, die erfassen, analysieren und Netzwerkverkehr analysieren!

Here is a blog post about these API's.

Meiner Meinung nach sollten Sie diese API (oder eine andere API wie WinPcap) verwenden, um den Datenverkehr zu filtern, anstatt Ihren eigenen Gerätetreiber zu schreiben.

Verwandte Themen