O que é um bom identificador único PC?

estive olhando para o código em este tutorial , e descobri que ele usa My.Computer.Name para salvar configurações que não deveriam vaguear entre computadores. É totalmente possível, no entanto, que um usuário tenha dois PCs identicamente nomeados. Se eles queriam ter o mesmo nome de usuário em cada PC, por exemplo, eles podem muito bem acabar com dois PCs chamados Username-PC.

Quais são alguns bons métodos para identificar diferentes PCs? Os PCs têm guias associados a eles, ou devo investigar a tirar o número de série de algum hardware? Não quero saber se a identificação persiste através da reinstalação do Windows.

(o tutorial que eu liguei está em VB.Net, mas estou a implementá-lo em C#)

 38
Author: dlras2, 2010-08-09

10 answers

Alguns bons identificadores:

    Endereço MAC: é bastante fácil de chegar, e geralmente é único. No entanto, ele pode ser falsificado / alterado com bastante facilidade, então ele depende de quão único ele precisa ser. Número de série da CPU: não está disponível em muitos sistemas antigos, mas está lá. Confira esta página MSDN . Não vai mudar, mas Está ligado a um computador. Número de série HDD: é provável que não mude, mas pode ser um incómodo se o HD falhar. Conferir esta página MSDN .
 37
Author: mattbasta, 2010-08-09 18:46:33

Se estiver no windows HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\ CurrentVersion\ProductId é único por máquina / por instalação do windows. onde como em algumas das outras respostas, como o endereço MAC, Proc SN, e HD SN vai ficar o mesmo entre as reinstalações do windows/situações de boot dual.

 16
Author: Scott Chamberlain, 2010-08-09 18:51:18

A verdadeira resposta a essa pergunta: não existe tal coisa.

Existem várias soluções" próximas o suficiente", mas cada uma delas tem a sua própria limitação.

Todas as identificações de hardware - Hardware mudam. E, em muitos casos você pode alterar esses identificadores (por exemplo, MAC spoofing).

O SID, como já comentei, também não é assim tão bom, porque o SID não vai mudar se o computador for instalado a partir de uma imagem. O SID é gerado pela instalação do windows, se o windows não foi instalado, mas copiado de uma imagem, o SID não vai mudar (embora seja comum regenerá - lo por causa de um mito sobre "risco de segurança" - Você não pode contar com isso).

Nome de computador-bem, como mencionado, eles devem ser únicos, mas não é aplicado de forma alguma.

Outra solução que você pode implementar é gerar o seu próprio identificador único e armazená-lo localmente (assumindo que você pode fazer tal coisa). Mais uma vez, esta solução não vai funcionar se o seu computador foi fotografado com a sua aplicação.

A melhor solução para você realmente depende do que você está tentando realizar. Eu tive o mesmo problema com uma rede bastante grande, e a melhor solução em meu caso era o nome do computador. Se você estiver absolutamente certo de que seu processo não será imageado, eu geraria um identificador único usando Guid porque provavelmente será o mais seguro.

 11
Author: DiGMi, 2012-09-22 17:29:07
Aqui está uma maneira de identificar um computador. A Usar O Sistema.Gestão para obter Win32_BIOS, você pode obter valores únicos da BIOS da sua máquina.

Ver: Classe Win32_BIOS, http://msdn.microsoft.com/en-us/library/aa394077.aspx

using System.Management;

string UniqueMachineId()
{
    StringBuilder builder = new StringBuilder();

    String query = "SELECT * FROM Win32_BIOS";
    ManagementObjectSearcher searcher = new ManagementObjectSearcher(query);
    //  This should only find one
    foreach (ManagementObject item in searcher.Get())
    {
        Object obj = item["Manufacturer"];
        builder.Append(Convert.ToString(obj));
        builder.Append(':');
        obj = item["SerialNumber"];
        builder.Append(Convert.ToString(obj));
    }

return builder.ToString();
}
Com uma lógica semelhante, também pode passar por"Win32_DiskDrive"; http://msdn.microsoft.com/en-us/library/aa394132.aspx ; e obter "Número de série" para cada unidade física. Neste caso, o
    foreach (ManagementObject item in searcher.Get())

Deve encontrar vários itens

 9
Author: andrewmcc, 2013-03-05 16:07:57

Usa o endereço MAC do cartão de rede. É suposto ser único. Mas pode ser mudado. Depende de quão malicioso você espera que seus usuários sejam e quão crítico sua aplicação é.

Algum código de amostra para o fazer:

public string GetMACAddress() {
    ManagementClass mc = new ManagementClass("Win32_NetworkAdapterConfiguration");
    ManagementObjectCollection moc = mc.GetInstances();

    string MACAddress = String.Empty;

    foreach (ManagementObject mo in moc) {
        if (MACAddress == String.Empty) { // only return MAC Address from first card
            if ((bool)mo["IPEnabled"] == true) MACAddress = mo["MacAddress"].ToString();
        }
        mo.Dispose();
    }

    return MACAddress;
}
 2
Author: MicSim, 2010-08-09 18:53:09
Tome três identificadores semi-únicos e semi-constantes. Use a regra de que 2 em 3 é suficiente para uma identificação positiva. Atualize os dados registrados para o 1 em 3 que é ocasionalmente errado.
 2
Author: Tomminn, 2017-09-11 02:52:03
Cada computador tem um SID único em circunstâncias normais.
 1
Author: Steven Sudit, 2010-08-09 18:46:06

Uma coisa que você pode usar é o MAC de qualquer interface de rede. Você também pode combinar várias fontes de informação. Como o número de série HDD, mac, tipo de processador para calcular um hash a partir dele.

 1
Author: schoetbi, 2010-08-09 18:46:33
Acho que não é possível ter dois PCs com o mesmo nome no mesmo domínio. Já tentou capturar o nome de domínio?
 0
Author: user279521, 2010-08-09 18:43:48

Dá uma vista de olhos aqui: a obter a etiqueta de Serviço da Dell Machine usando a. net?

Podes tirar alguns dados únicos do registo.
 0
Author: JonH, 2017-05-23 10:31:13