2012-03-11 23 views
5

Potrzebuję określić statystyki użycia sieci w procesie przetwarzania podobne do tego, co może zrobić TCPView.Uzyskiwanie statystyk przepustowości połączenia

Example http://img513.imageshack.us/img513/861/6601f15814544055a590e26.png

Więc zanim mnie strzelać do wysyłania duplikatu this question lub this question, chciałbym podkreślić, że żadna z tych posiadać gruntowną odpowiedź, która może mi pomóc rzeczywiście to zrobić.

Prowadzę badania i istnieje wiele sposobów na wyszczególnienie aktywnych połączeń i powiązanych z nimi procesów, niezależnie od tego, czy dzieje się to przy użyciu netstat lub innych interfejsów API systemu Windows, takich jak IpHlpAPI.dll.

Teraz, z tego co Google'ing robiłem, nie znalazłem dużo - z wyjątkiem tych niejasnych warunkach: GetPerTcpConnectionEStats i GetPerTcp6ConnectionEStats. Prawdopodobnie odpowiednio dla TCP przez IPv4 i IPv6. Teraz, gdy czytałem jego rzekomo w stanie zrobić to, co muszę zrobić. Jednak to nadal pozostawia UDP. A te nie są również dostępne w systemach XP, na których działa TCPViewer.

Byłbym zadowolony z używania tych dla TCP, ale problem polega na tym, że nie mogę znaleźć przykładów użycia ich z C#.

więc myślę, że wszystko sprowadza się do tych kilku pytań:

  • Czy ktoś wie, jak właściwie TCPView prawda?
  • Jak używać GetPerTcpConnectionEStats dla TCP? Czy może nawet osiągnąć to, co sugeruję?
  • Czy jest inna znana alternatywa, która zadziała w przypadku protokołu UDP?

Chodzi o to, aby zobaczyć niezależne wykorzystanie przepustowości samych procesów. Nie obliczaj całkowitego wykorzystania przepustowości systemu.

Z góry dziękuję za wszelkie odpowiedzi.

+0

Jest bardzo prawdopodobne, że można to zrobić za pomocą WMI/liczników wydajności, jednak osobiście uważam, że te API są raczej tajemnicze ... na wypadek, gdyby nie otrzymałeś dobrych odpowiedzi i szukasz dalszych słów kluczowych do google. –

+0

Jakieś rozwiązanie tego? –

+0

@TomerPeled: Nigdy nie znalazłem rozwiązania i porzuciłem projekt (ponieważ i tak był osobisty). Jeśli jednak dowiesz się, jak określić wykorzystanie przepustowości poszczególnych procesów, opublikuj je jako odpowiedź i może to wywołać u mnie motywację do ukończenia mojego starego projektu :) – caesay

Odpowiedz

1

Spędziłem trochę czasu, próbując dowiedzieć się, jak zrobić coś podobnego (opóźnienie w stosunku do przepustowości), ale musiałem zrezygnować z powodu braku czasu na zainwestowanie. Myślałem, że dodam tu moje odkrycia w nadziei, że w końcu otrzymamy odpowiedź.

Będziesz oczywiście potrzebował używać PInvoke i obawiam się, że szczegóły są znacznie poza moim doświadczeniem z tym.

Ten Wrapper Library on CodeProject wykorzystuje AllocateAndGetTcpExTableFromStack który działa tylko na Windows XP i Server 2003. Nadal nie dostać się przepustowość choć przykro.

Najbliższa informacja, którą mogłem znaleźć jako punkt wyjścia (dla Vista/Server 2008 lub nowszego) jest przykładem na pinvoke.net dla GetExtendedTcpTable.

Narzędzie PInvoke Interop Assistant może pomóc w ustaleniu sposobu wywołania niezarządzanego kodu.

Gdybym miał próbować że to próbuję dowiedzieć się, co następuje:

  1. Jak wywołać SetPerTcpConnectionEStats aby umożliwić gromadzenie TcpConnectionEstatsBandwidth poprzez odpowiednią TCP_ESTATS_TYPE.
  2. Użyłbym IPGlobalProperties.GetActiveTcpConnections, aby uzyskać informacje potrzebne do utworzenia MIB_TCPROW.
  3. Określ sposób wywoływania GetPerTcpConnectionEStats w celu monitorowania danych.
Powiązane problemy