Frage

Wir beobachten Nutzungsstatistiken von einer Netzwerk-Schnittstelle NetworkInterface.GetIPv4Statistics () in .NET 2.0 verwenden. Dies ist die Berichterstattung nicht korrekte Statistiken für Verbindungen über die VPN-Datenverkehr getunnelt wird. Statt - im Fall des Cisco VPN-Client -. Die Nutzung ist nur mit einem neuen Netzwerk-Schnittstelle zugeschrieben, die sich wie eine Ethernet-Verbindung sieht einfach

Windows selbst (Vista, zumindest) fügt die VPN-Statistiken an die tatsächlichen physikalischen Schnittstelle richtig, so den ‚Status‘ Dialogs für die ursprüngliche Verbindung Betrachtung zeigt die korrekte Byte zählt. Allerdings sind die Ergebnisse des Aufrufs in .NET nicht fusionieren, den Verkehr zusammen.

Gibt es eine Möglichkeit, die VPN-Verbindung zurück zum Netzwerkverbindung zu verbinden, über die sie getunnelt wird? Gelingt das nicht, hat jemand wissen, welche API durch den Statusdialog verwendet wird korrekte Statistiken abrufen?

Im Moment sind wir mit manuell Verbindungen zu erkennen, dass sie aussehen wie VPNs sind und fügen ihre Nutzung zu, was andere Verbindung aktiv ist, und dies scheint nicht wie eine robuste Lösung.

War es hilfreich?

Lösung 3

Wie Rob schon sagt, die Antwort liegt in WMI. Win32_PerfFormattedData_RemoteAccess_RasPort scheint genau das zu sein, was Windows selbst verwendet - die Zahlen sind das gleiche, Byte für Byte, ob die VPN-up ist oder nicht

.

ich getestet mit:

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

Andere Tipps

Hier ist ein Programm in Delphi geschrieben (mit vollständigem Source und Erklärung), die Sie Netzwerkinformationen, einschließlich VPN-Daten sammeln helfen. Dies wird mit dem Open-Source-Indy Komponenten , die auch für den Einsatz zur Verfügung steht mit C #.

Ich würde vorschlagen, durch die Quelle durchsuchen, und Sie werden die genaue Windows-API-Aufrufe macht es zu finden. Es stützt sich auf die IP Helper API ( IPHlpApi ).

Wenn Sie auf der Suche nach C # nur Beispiele, ich würde vorschlagen, dass einige Google-ing für "C # und IpHlpApi" zu tun.

Viele Grüße

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

Ich werde überprüfen müssen, wenn ich an der Arbeit, um zu sehen, was meine Config aussieht.

Eine Sache, die Cisco VPN tut, ist, wenn konfiguriert, Split-Tunneling zu deaktivieren. Was das bedeutet, ist, dass Sie Ihre lokale Subnetz den Zugriff auf die Verbindung verhindert werden, die VPN verbunden ist.

So wie ich das sehen kann, ist, wenn meine Ethernet-Verbindung mit einer IP-Adresse konfiguriert ist, aber nicht über einen Standard-Gateway.

Angenommen, dass Sie die VPN-Verbindung zu identifizieren, dass Gateway-Verbindung weniger würde Ihre andere Verbindung sein.

Außerdem müssen Sie in jede WMI-Klassen aussah. Cisco VPN vielleicht mit einer WMI-Klasse in Wechselwirkung treten kann.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top