2012-03-11 13 views
5

Necesito determinar estadísticas de uso de red por proceso similares a lo que TCPView puede hacer.Obtener estadísticas de ancho de banda de conexión

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

Así que antes me disparan por publicar un duplicado de this question, o this question, me gustaría señalar que ninguno de los que tienen una respuesta completa que me podría ayudar a hacer esto realidad.

He estado investigando, y hay claramente muchas maneras de enumerar las conexiones activas y sus procesos asociados, ya sea con netstat u otras API de Windows como IpHlpAPI.dll.

Ahora, de lo que Google'ing que he hecho, no he encontrado mucho - a excepción de estos términos vagos: GetPerTcpConnectionEStats y GetPerTcp6ConnectionEStats. Presumiblemente para TCP sobre IPv4 e IPv6 respectivamente. Ahora, donde estaba leyendo, supuestamente es capaz de hacer lo que tengo que hacer. Sin embargo, eso aún deja fuera UDP. Y tampoco están disponibles en los sistemas XP, en los que TCPViewer funciona.

Estaría satisfecho con el uso de aquellos para TCP, pero el problema es que parece que no puedo encontrar ejemplos de cómo usarlos desde C#.

así que supongo que todo se reduce a estas preguntas:

  • ¿Alguien realmente saben cómo TCPView lo hace?
  • ¿Cómo uso GetPerTcpConnectionEStats para el TCP? ¿O puede incluso lograr lo que estoy sugiriendo?
  • ¿Hay alguna otra alternativa conocida que funcione para UDP?

El objetivo de todo esto es ver el uso del ancho de banda independiente de los procesos. No calcula el uso total del ancho de banda del sistema.

Gracias de antemano por cualquier respuesta.

+0

Es muy probable que pueda hacer esto a través de los contadores de rendimiento/WMI, sin embargo, personalmente encuentro esas API bastante arcanas ... en caso de que no obtenga buenas respuestas y busque más palabras clave para google. –

+0

¿Alguna solución para esto? –

+0

@TomerPeled: Nunca encontré una solución, y abandoné el proyecto (como era personal de todos modos). Sin embargo, si descubres cómo determinar el uso del ancho de banda de procesos individuales, publícalo como respuesta y podría despertar cierta motivación en mí para terminar mi antiguo proyecto :) – caesay

Respuesta

1

Pasé un tiempo tratando de descubrir cómo haría algo similar (latencia frente al ancho de banda) pero tuve que renunciar debido a la falta de tiempo para invertir. Pensé en agregar aquí mis hallazgos con la esperanza de obtener una respuesta.

Obviamente tendrá que usar PInvoke y me temo que los detalles van más allá de mi experiencia con él.

Este Wrapper Library on CodeProject utiliza que solo funciona en Windows XP y Server 2003. Aun así, no obtiene el ancho de banda, lo siento.

La información más cercana que pude encontrar como punto de partida (para Vista/Server 2008 o posterior) es un ejemplo en pinvoke.net para GetExtendedTcpTable.

La herramienta PInvoke Interop Assistant podría ayudar a determinar cómo llamar al código no administrado.

Si tuviera que seguir tratando este que iba a tratar de averiguar lo siguiente:

  1. Cómo llamar SetPerTcpConnectionEStats para permitir colección de TcpConnectionEstatsBandwidth a través de la adecuada TCP_ESTATS_TYPE.
  2. Usaría IPGlobalProperties.GetActiveTcpConnections para obtener la información necesaria para crear un MIB_TCPROW.
  3. Determine cómo llamar al GetPerTcpConnectionEStats para supervisar los datos.
Cuestiones relacionadas