微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

我如何确定Windows机器的身份?

我有一个由服务器和客户端进程组成的程序。 两者都在Windows系统上运行 – Windows 2000或更高版本。 这两个进程可以在同一台机器上或两台不同的机器上运行。

客户端如何确定它是否与服务器在同一台机器上运行? 如果服务器没有运行,客户端无法工作,也不关心服务器可能在哪里,所以这种情况是不可能的。 我听说每台Windows机器都有一个UUID–我可以获得它并用于这个目的吗?

Windows网络要求计算机名称是唯一的,所以调用GetComputerName api并使客户端和服务器交换名称(并将接收到的名称与所看到的名称进行比较)就足够了。 如果客户端和服务器可以独立启动,那么在这个过程中需要一些协议。 客户端启动交换似乎是合乎逻辑的,服务器只有在从客户端收到名称时才发送它的名称。 如果客户端看到相同的名字,则可以中止连接。

我相信大多数虚拟机系统都会允许虚拟机拥有自己的名字,所以应该可以在虚拟机上进行测试。 然而,我并不具备所有虚拟化技术的丰富经验,所以不能肯定地说。

一个关于生成一个唯一的机器ID可能会有帮助的问题 链接到提到MachineGUID的上一个答案

将API添加到报告其机器名称的服务器很简单。 环境变量是COmpuTERNAME。 客户可以检查,对不对?

你需要处理这些情况吗?

客户端正在运行,但服务器没有响应,并且您想知道无响应的服务器是否在远程计算机上。

客户端和服务器在同一台主机上的两台不同的虚拟机上运行,​​并且要将其报告为“在同一台计算机上运行”。

客户端运行在运行服务器的同一台计算机上的虚拟机中,并且要将其报告为“运行在同一台计算机上”。

客户端和服务器在不协调的网络上运行,并且可能被分配了相同的名称

服务器可能是敌对的,会试图欺骗客户端。

网卡将具有唯一的MAC。 如果服务器和客户端都报告相同的MAC,那么他们使用相同的网卡。 如果客户端和服务器都在不同的虚拟机上运行,​​但使用相同的网卡,您认为它们运行在同一台机器上还是不同的机器上?

如何尝试建立一个回送tcp连接? 或者可能检查某个预定义文件夹中由服务器创建的某个锁定文件

我不知道到底是怎么回事,但在Win32中肯定有一些与Unix中的/ proc文件系统(我认为windows taskmanager有免费的替代品,也许你可以看看他们的源代码)在哪里可以搜索你的服务器处理。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐