我们使用.NET 2.0中的NetworkInterface.GetIPv4Statistics()来监控网络接口的使用统计信息。这没有报告正在通过隧道传输VPN流量的连接的正确统计信息。相反,在Cisco VPN客户端的情况下,使用情况只是归因于一个新的网络接口,该接口看起来就像以太网连接。
Windows本身(至少是Vista)会正确地将VPN统计信息添加到实际物理接口,因此查看原始连接的“Status”对话框时会显示正确的字节计数。但是,.NET中的调用结果不会将流量合并在一起。
有没有一种方法可以将VPN连接重新关联到通过隧道传输的网络连接?否则,是否有人知道状态对话框正在使用哪个API来检索正确的统计信息?
目前,我们必须手动检测看起来像是VPN的连接,并将其使用情况添加到任何其他活动的连接中,而这似乎不是一个可靠的解决方案。
发布于 2009-03-20 16:51:53
正如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"]);
}
}发布于 2009-03-01 04:01:12
Here's a program written in Delphi (具有完整的源代码和解释),将帮助您收集网络信息,包括VPN数据。这是使用也可用于C#的open-source Indy components。
我建议浏览一下源代码,你会发现它发出的确切的Windows API调用。它严重依赖于IP Helper API (IPHlpApi。
如果你只想找C#的例子,我建议你在谷歌上搜索"C#和IpHlpApi“。
问候
alt text http://z.about.com/d/delphi/1/0/k/2/112903_2.gif
发布于 2009-02-24 02:44:58
我得在上班的时候检查一下我的配置是什么样子的。
Cisco VPN所做的一件事就是禁用分割隧道。这意味着您将无法访问连接到VPN的连接上的本地子网。
当我的以太网连接配置了IP地址,但没有默认网关时,我可以看到这一点。
假设您标识了VPN连接,则该无网关连接将是您的另一个连接。
另外,你有没有研究过任何WMI类。Cisco VPN可能会与WMI类进行交互。
https://stackoverflow.com/questions/565734
复制相似问题