Pregunta

Estamos monitoreando las estadísticas de uso de una interfaz de red con NetworkInterface.GetIPv4Statistics () en .NET 2.0. Esto no está reportando estadísticas correctas para conexiones a través de la cual se está tunelizado tráfico VPN. En su lugar - en el caso de que el cliente VPN de Cisco -. El uso se acaba de atribuir a una nueva interfaz de red que sólo se parece a una conexión Ethernet

propio Windows (Vista, por lo menos) añade las estadísticas de VPN a la interfaz física real correctamente, por lo que la visualización de la ventana de diálogo 'Estado' para la conexión original muestra la cantidad de bytes correctos. Sin embargo, los resultados de la llamada en .NET no se combinan el tráfico juntos.

¿Hay una manera de asociar la conexión VPN de nuevo a la conexión de red sobre la que se está túnel? De no ser así, ¿alguien sabe qué API está siendo utilizado por el diálogo de estado para recuperar las estadísticas correctas?

En el momento que estamos teniendo para detectar manualmente las conexiones que parecen que son las VPN y añadir su uso a cualquier otra conexión está activa, y esto no parece ser una solución robusta.

¿Fue útil?

Solución 3

Como sugiere Rob, la respuesta se encuentra dentro de WMI. Win32_PerfFormattedData_RemoteAccess_RasPort parece ser exactamente lo que Windows utiliza en sí - los números son los mismos, byte a byte, si el VPN es o no

.

I probado con:

static class Program
{
    static void Main()
    {
        var query = new WqlEventQuery("__InstanceModificationEvent", TimeSpan.FromSeconds(1),
                                      "TargetInstance ISA 'Win32_PerfFormattedData_RemoteAccess_RasPort' AND TargetInstance.BytesReceived > 0");

        var watcher = new ManagementEventWatcher(query);
        watcher.EventArrived += EventArrived;
        watcher.Start();

        Console.ReadLine();
    }

    static void EventArrived(object sender, EventArrivedEventArgs e)
    {
        var mo = e.NewEvent["TargetInstance"] as ManagementBaseObject;
        Console.WriteLine("{0:#,0}: {1:#,0} bytes sent, {2:#,0} bytes received", mo["Name"], mo["BytesTransmitted"], mo["BytesReceived"]);
    }
}

Otros consejos

He aquí un programa escrito en Delphi (con código fuente completo y explicación) que le ayudará a recopilar información de la red, incluyendo los datos de VPN. Esto es usando el de código abierto componentes Indy , que también está disponible para uso con C #.

Yo te sugeriría que navegar a través de la fuente, y se encuentra el API de Windows llama exacta que hace. Se basa en gran medida de la API de Ayuda de IP ( IPHlpApi ).

Si usted está buscando para C # sólo ejemplos, sugeriría hacer un poco de Google-ción de "C # y IpHlpApi".

Regards

texto alternativo http: //z.about .com / d / delphi / 1/0 / k / 2 / 112903_2.gif

Voy a tener que comprobar cuando llegue a trabajar para ver lo que mi configuración se parece.

Una cosa que Cisco VPN se hace, si se ha configurado, la desactivación de la división de túnel. Lo que esto significa es que se le impide el acceso a la subred local en la conexión que está conectado a la VPN.

La forma en que puedo ver esto, es cuando mi conexión Ethernet está configurado con una dirección IP, pero no tiene una puerta de enlace predeterminada.

Suponiendo que identifique la conexión VPN, esa conexión de puerta de enlace, menos sería su otra conexión.

Además, tiene usted miraba en cualquier clase de WMI. Cisco VPN puede interactuar con una clase WMI tal vez.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top