【问题标题】:detecting a VPN connection in Windows?在 Windows 中检测 VPN 连接?
【发布时间】:2011-03-12 11:39:05
【问题描述】:

有什么方法可以检测我是否使用 C 语言中的标准 Windows API 连接到 VPN?

基本上,我有一个客户端必须与服务器同步,但前提是 VPN 已连接。这可以是标准的 Windows VPN 客户端或 Citrix。

RAS 在这里有用吗?

谢谢,感谢代码。

编辑: 让它更清楚。

这是一个将在我们客户的计算机上运行的客户端,他们可以根据需要设置 VPN 和服务器。所以我想知道windows是否在某个地方保存了一个我可以通过API或注册表或WMI或任何可以告诉我VPN的设置:否或是,如果是,信息。

【问题讨论】:

  • 我不建议检查 VPN 连接,而是检查服务器/服务的可用性。使其更易于调试和使用。

标签: c windows vpn


【解决方案1】:

您的应用能否查找仅通过 VPN 可用的域名的 IP?如果名称查找失败,则说明您不在 VPN 上。如果一般的 Internet 无法查询 VPN 上的 DNS 服务器,这可能是一个可行的解决方案(但可能还不够通用,无法满足您的需求?)。然后,您可以尝试连接到该 IP - 只有在您使用 VPN 时才会成功。

您甚至可以让公共 DNS 服务器提供 IP 地址。只需使用永远不会解析为公共 IP 的特殊主机名。如果 VPN 未启动,您将无法访问该地址。

【讨论】:

  • 你假设我知道地址。我不。这是一个将在我们客户的计算机上运行的客户端,他们可以根据需要设置 VPN 和服务器。所以我想知道windows是否保留了一个我可以通过API或注册表或WMI或任何可以告诉我VPN的设置:否或是,如果是,信息。
【解决方案2】:

我已查找供应商特定的注册表设置以确定隧道是否处于活动状态。这适用于 Nortel 和 Cisco VPN 客户端。

【讨论】:

    【解决方案3】:

    相当确定 VPN 的卖点之一是用户级应用程序总体上应该完全不知道它的存在。您最好的做法可能是使用 COM 或其他形式的 IPC 查询已知的 VPN 提供商服务,或者只是查看它们是否存在和/或活跃,并根据这些证据推断情况。

    【讨论】:

    • 您认为查询 WMI 会有所帮助吗?如果是,什么对象?
    • @Jessica:这个;我不能说。我只是在谈论我对 VPN 网络的一般经验。
    【解决方案4】:

    使用 VPN,我怀疑您可以访问其他方式不存在的资源。因此,您可以 PING 测试 VPN 网络上的服务器。 ICMP 是用于 ping 的协议。

    这里有一些例子:http://www.alhem.net/project/ex10/index.html

    【讨论】:

    • 我之前想过,但我需要获取IP和域名才能同步。因此,如果当我请求 IP 或域时计算机连接到 VPN 和互联网,有时我会获得有关互联网的信息,而不是来自 VPN 的信息。这取决于第一个连接的“NIC”是否是 VPN,所以我正在寻找更明确的东西。
    • 我猜 Robert 的意思是,您可以 PING 一个网络节点,该节点在从 Internet 联系时不响应,但在从 VPN 内部联系时会响应。
    【解决方案5】:

    无论您是否使用 VPN,您的 IP 空间都应该有所不同 - 如果 VPN 设置正确,那么除非您使用 VPN,否则服务器甚至不应该是可访问的。您可以尝试 ping 服务器,仅在收到响应后尝试执行同步?

    【讨论】:

    • 我在寻找更明确的东西(见之前的评论)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-10-22
    • 2019-07-08
    • 2013-04-23
    • 2019-04-09
    • 1970-01-01
    • 1970-01-01
    • 2011-12-29
    相关资源
    最近更新 更多