编辑
我使用的操作系统是Windows 7.我正在寻找一种独立于VPN类型的解决方案。
答案 0 :(得分:1)
根据您所连接的位置(LAN / VPN),您可以访问不同的网络资源(服务器)。我最好的选择是ping( ICMP echo )这些服务器或以其他方式尝试访问他们托管的服务,并猜测根据成功/失败连接到哪个网络。如何做到这完全取决于您的操作系统,正如@PaulR所提到的那样。
涉及枚举网络连接,路由表等的任何其他解决方案很可能更加复杂且容易出错,因此我完全避免这种情况,并采用我提到的简单服务检测。
答案 1 :(得分:1)
VPN尝试透明,因此这很棘手。
大多数机器只有一条到其他机器的路线。使用VPN可能有两条路由。所以你可以查看路由表。有些VPN客户端会禁用本地网络,因此您将返回到一条路由。
如果您可以告诉您的程序本地子网上的IP地址,那么很容易。
答案 2 :(得分:0)
我试图确定同样的事情,这是我得到的最接近的事。
我们使用瞻博网络Network Connect,我已经看到当我直接插入网络时它会自行关闭。因此,如果它在那里运行很有可能你没有直接连接。如果它没有运行,那么您要么直接连接,要么不使用内部服务器。因此,使用此方法获取进程列表并检查您的VPN进程,结合上述仅在公司网络中可用的ping服务器的方法可能会给您带来可靠的结果。我用这段代码来测试我的VPN进程。这是CLR,不确定你是否会使用.Net资源......
#include "stdafx.h"
#using <mscorlib.dll>
#using <System.dll>
using namespace System;
using namespace System::Diagnostics;
using namespace System::ComponentModel;
int main() {
System::String ^procName = "dsNetworkConnect";
array<System::Diagnostics::Process^>^matches =
System::Diagnostics::Process::GetProcessesByName(procName);
if (matches->Length > 0)
System::Console::WriteLine("Process " + matches[0]->ProcessName +
" found - do something");
else
System::Console::WriteLine("Process not found, do something else.");
System::Console::ReadKey();
}
答案 3 :(得分:0)
如果您想要做的事情主要是关注速度,那么您可以计时。局域网通常在很少的MS中响应,而VPN可能至少在几十毫秒内响应。