以编程方式查看 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 是不是连接到指定网络的主要内容,如果未能解决你的问题,请参考以下文章