以编程方式查看 PC 是不是连接到指定网络

Posted

技术标签:

【中文标题】以编程方式查看 PC 是不是连接到指定网络【英文标题】:Programmatic way to see if a PC is connected to a specified network以编程方式查看 PC 是否连接到指定网络 【发布时间】:2015-03-16 22:13:35 【问题描述】:

操作系统:Windows,语言:C++

我正在实现这个用例: 当用户启动我的软件时,该软件需要知道他/她的 PC 当前是否连接到指定的网络(例如大学校园内网)。只有在是时,才启用该软件的某些功能。

我是这个领域的新手,真的不知道可靠的程序化方式。函数 GetComputerNameEx (https://msdn.microsoft.com/en-us/library/windows/desktop/ms724301%28v=vs.85%29.aspx) 似乎很有希望。如果此函数适用于我的用例,我可以依赖此函数获取的哪些数据?

提前致谢!

【问题讨论】:

看看this question。 谢谢梅瓦。我会试试。但是,如果 PC 是通过电缆连接的呢?这种情况下,这个域名好用吗? 【参考方案1】:

更可靠的指标之一是某些 MAC 地址的存在:这些地址仅在 LAN 内可见,在全球互联网上不可见。即使在经过 NAT 的 IPv4 网络上,MAC 地址也是全球唯一的。

在 Windows 上你可以试试SendArp

【讨论】:

【参考方案2】:

我想你只能知道这台电脑是否连接到互联网。 使用集线器,您找不到大学互联网或某些家庭网络之间的区别。

您必须通过 ping 一个已知良好的服务器(例如 google.com)、ping 您的 authserver 或任何可以确保此计算机已连接到 Internet 的方式来检查此连接。

#include <iostream>
#include <windows.h> 
#include <wininet.h>
using namespace std;

int main()

  if(InternetCheckConnection(L"http://www.google.com",FLAG_ICC_FORCE_CONNECTION,0)
  
        cout << "connected to internet";
  

  return 0;

refrence :Nayana Adassuriya

【讨论】:

在某些情况下,至少可以通过 PC 的公共 IP 地址来区分它们。 msdn.microsoft.com/en-us/library/windows/desktop/…。但对我来说,公共 IP 地址的可靠性值得怀疑。 @user3552888 你能详细说明为什么它有问题吗? @Paweł Stawarz:让我以大学内部网为例。两个部门有自己的局域网。只有连接到一个 LAN 的 PC 才能访问这些功能。但它们可能共享相同的公共 IP 地址。如果我错了,请纠正我。 @user3552888 但他们确实是整个学院的一部分。这不正是你要找的吗?是否也需要区分不同的部门?

以上是关于以编程方式查看 PC 是不是连接到指定网络的主要内容,如果未能解决你的问题,请参考以下文章

如何以编程方式连接到 Android 中的特定 Wi-Fi 网络?

以编程方式将设备连接到android中的同一wifi网络?

如何以编程方式通过 ipad 检测并连接到 3G 网络

如何以编程方式扫描、查找和连接到开放的 wifi AP?

在 iOS 8 中以编程方式连接到 ***

Xamarin表单(ios):以编程方式连接到wifi时的Runtimeexception