.net 捕获VPN使用统计信息

.net 捕获VPN使用统计信息,.net,windows,networking,vpn,cisco,.net,Windows,Networking,Vpn,Cisco,我们正在使用.NET 2.0中的NetworkInterface.GetIPv4Statistics()监视网络接口的使用统计信息。对于正在隧道传输VPN流量的连接,这不会报告正确的统计信息。相反,在Cisco VPN客户机的情况下,这种使用只是归因于一个看起来像以太网连接的新网络接口 Windows本身(至少是Vista)将VPN统计信息正确地添加到实际物理接口中,因此查看原始连接的“状态”对话框可以显示正确的字节计数。但是,在.NET中调用的结果不会将流量合并在一起 有没有办法将VPN连接与

我们正在使用.NET 2.0中的NetworkInterface.GetIPv4Statistics()监视网络接口的使用统计信息。对于正在隧道传输VPN流量的连接,这不会报告正确的统计信息。相反,在Cisco VPN客户机的情况下,这种使用只是归因于一个看起来像以太网连接的新网络接口

Windows本身(至少是Vista)将VPN统计信息正确地添加到实际物理接口中,因此查看原始连接的“状态”对话框可以显示正确的字节计数。但是,在.NET中调用的结果不会将流量合并在一起

有没有办法将VPN连接与正在进行隧道传输的网络连接相关联?否则,是否有人知道状态对话框正在使用哪个API来检索正确的统计信息


目前,我们必须手动检测看起来像VPN的连接,并将它们的使用添加到任何其他活动连接中,这似乎不是一个健壮的解决方案。

我必须在开始工作时检查配置

Cisco VPN所做的一件事是,如果已配置,则禁用拆分隧道。这意味着您无法访问连接到VPN的连接上的本地子网

我可以看到的是,我的以太网连接配置了IP地址,但没有默认网关

假设您标识了VPN连接,那么无网关连接将是您的另一个连接

另外,您是否研究过任何WMI类。Cisco VPN可能会与WMI类交互。

(提供完整的源代码和说明),这将帮助您收集网络信息,包括VPN数据。这是使用的,也可用于C#

我建议您浏览一下源代码,您会发现它所进行的Windows API调用。它严重依赖于IP Helper API()

如果您正在寻找仅使用C语言的示例,我建议您在google上搜索“C语言和IPHLAPI”

问候


正如Rob所建议的,答案就在WMI中。似乎正是Windows自己使用的东西——无论VPN是否启动,每个字节的数字都是相同的

我测试了:

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

不幸的是,我仍然可以看到原始(PPP)连接的网关地址。我将通过WMI进行搜索,看看是否还有更多信息。不过,Win32_NetworkAdapter和Win32_NetworkAdapter配置没有添加任何有用的内容。您的方法似乎是正确的。我正在使用Vista,2个Windows VPN连接通过以太网运行。我迭代NetworkInterface.GetAllNetworkInterfaces以获取每个的统计信息。以太网总数包括每个VPN连接的使用情况。请发布ipcongif/all的详细信息?我们正在测试的设置中唯一的区别似乎是VPN是通过PPP连接构建的,而不是以太网。可能还与HTTP流量(这是我们真正测试的)通过VPN后面的代理有关。我会看看是否能尽快收集到一些更详细的信息。System.Net.NetworkInformation中的大部分内容都包装了iphlapi.dll,所以我不确定这是否有用。我会查看一下你链接到的MSDN文档,看看是否还有其他攻击途径。很公平。在我看来,我认为这个解决方案需要相当多的P/Invoke,使用像C++/Delphi这样的本地语言可能会更好。不过,我会把这个留给你。这并没有得到广泛的支持。我们最终使用了第三方RAS库。