Question

Nous surveillons les statistiques d'utilisation d'une interface réseau à l'aide NetworkInterface.GetIPv4Statistics () dans .NET 2.0. Ce ne signale pas les statistiques correctes pour les connexions sur lesquelles le trafic VPN est Tunneled. Au lieu de cela - dans le cas du client VPN Cisco -. L'utilisation est tout simplement attribué à une nouvelle interface réseau qui ressemble à une connexion Ethernet

Windows lui-même (Vista, au moins) ajoute les statistiques VPN à l'interface physique correctement réelle, visionnant ainsi la boîte de dialogue « Status » pour la connexion d'origine montre le nombre d'octets corrects. Cependant, les résultats de l'appel .NET ne se confondent pas le trafic ensemble.

Yat-il un moyen d'associer la connexion VPN retour à la connexion réseau sur lequel il est en cours de tunnelée? A défaut, personne ne sait quelle API est utilisée par la boîte de dialogue d'état pour obtenir des statistiques correctes?

À l'heure actuelle, nous allons avoir à détecter manuellement les connexions qui ressemblent ils sont réseaux privés virtuels et ajouter leur utilisation à toute autre connexion est active, et cela ne semble pas une solution robuste.

Était-ce utile?

La solution 3

Comme Rob l'indique, la réponse se trouve dans WMI. Win32_PerfFormattedData_RemoteAccess_RasPort semble être exactement ce que Windows utilise lui-même - les chiffres sont les mêmes, octet par octet, si le VPN est ou pas

.

Je l'ai testé avec:

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"]);
    }
}

Autres conseils

Voici un programme écrit en Delphi (avec la pleine source et explication) qui vous aidera à recueillir des informations sur le réseau, y compris les données VPN. Ce utilise le Indy open-source , qui est également disponible pour une utilisation avec C #.

Je vous suggère de naviguer à travers la source, et vous trouverez l'API Windows appelle exactement il fait. Il est fortement tributaire sur l'API d'assistance IP ( IPHLPAPI ).

Si vous êtes à la recherche C # que des exemples, je vous suggère de faire quelques google-ing pour "C # et IPHLPAPI".

Cordialement

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

Je vais devoir vérifier quand je travaille pour voir ce que ma config ressemble.

Une chose qui ne Cisco VPN est, si elle est configurée, la désactivation de split tunneling. Cela signifie que vous êtes empêchés d'accéder à votre sous-réseau local sur la connexion qui est connecté à VPN.

La façon dont je vois cela, est quand ma connexion Ethernet est configuré avec une adresse IP, mais ne dispose pas d'une passerelle par défaut.

Supposant que vous identifiez la connexion VPN, cette connexion passerelle moins serait votre autre connexion.

Aussi, avez-vous regardé dans toutes les classes WMI. VPN Cisco peut interagir avec une classe WMI peut-être.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top