如何确定Windows计算机的标识?

时间:2009-05-22 08:51:01

标签: windows winapi identity

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

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

3 个答案:

答案 0 :(得分:2)

Previous question about generating a unique machine id可能有所帮助。 Link to previous answer which mentions MachineGUID

向报告其计算机名称的服务器添加API非常简单。环境变量是COMPUTERNAME。客户可以检查一下,对吗?

你需要处理这些案件吗?

  1. 客户端正在运行,但服务器没有响应,您想知道无响应的服务器是否在远程计算机上。
  2. 客户端和服务器在同一主机上的两个不同虚拟机中运行,并且您希望将其报告为“在同一台计算机上运行。”
  3. 客户端运行在由运行服务器的同一台计算机托管的虚拟机中,并且您希望将其报告为“在同一台计算机上运行。”
  4. 客户端和服务器在未经协调的网络上运行,两者可能都被分配了相同的名称。
  5. 服务器可能存在敌意,并试图欺骗客户端。
  6. 网卡将具有唯一的MAC。如果服务器和客户端报告相同的MAC,则他们使用相同的网卡。如果客户端和服务器都在不同的虚拟机中运行但使用相同的网卡,您是否认为它们在同一台计算机或不同的计算机上运行?

答案 1 :(得分:2)

Windows网络要求计算机名称是唯一的,因此调用GetComputerName api并具有客户端和服务器交换名称(并将收到的名称与他们看到的名称进行比较)应该足够了。如果客户端和服务器可以彼此独立启动,那么您将需要某种协议来完成此过程。客户端启动交换似乎合乎逻辑,服务器只有在从客户端收到名称时才发送其名称。然后,如果客户端看到相同的名称,则可以中止连接。

我相信大多数虚拟机系统都会允许虚拟机拥有自己的名称,因此您仍然可以在虚拟机上进行测试。但是我没有丰富的所有虚拟化技术经验,所以不能肯定地说。

答案 2 :(得分:1)

如何尝试建立环回tcp连接?或者可能检查服务器在预定义文件夹中创建的某些锁定文件...

我不知道究竟是怎么回事,但肯定会有一些与Win32中的/ proc文件系统相同的东西(我认为可以免费替换windows taskmanager,也许你可以查看它们的来源)为您的服务器进程。