代码之家  ›  专栏  ›  技术社区  ›  Thom

捕获VPN使用统计信息

  •  3
  • Thom  · 技术社区  · 16 年前

    我们正在使用.NET 2.0中的networkInterface.getIPv4Statistics()监视网络接口的使用统计信息。这没有报告正确的连接统计数据,而VPN流量正通过这些连接进行挖掘。相反,在CiscoVPN客户机的情况下,这种使用仅仅是由于一个看起来像以太网连接的新网络接口。

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

    有没有一种方法可以将VPN连接与它正在通过的网络连接相关联?如果失败,是否有人知道状态对话框正在使用哪个API来检索正确的统计信息?

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

    3 回复  |  直到 16 年前
        1
  •  2
  •   Mick    16 年前

    Here's a program written in Delphi (有完整的来源和解释)这将帮助您收集网络信息,包括VPN数据。这是使用 open-source Indy components ,也可用于C。

    我建议您浏览一下这个源代码,您会发现它调用的Windows API是什么样的。它严重依赖IP助手API( IPHlpApi )

    如果你在寻找只包含C语言的例子,我建议你在谷歌上搜索“C语言”和“iphlapi”。

    当做

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

        2
  •  1
  •   Rob Haupt    16 年前

    当我开始工作时,我必须检查一下我的配置是什么样子的。

    CiscoVPN做的一件事是,如果配置了,禁用拆分隧道。这意味着您无法通过连接到VPN的连接访问本地子网。

    我可以看到,当我的以太网连接配置了一个IP地址,但没有默认网关时。

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

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

        3
  •  0
  •   Thom    16 年前

    正如Rob所说,答案就在wmi中。 Win32_PerfFormattedData_RemoteAccess_RasPort 似乎正是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"]);
        }
    }