Come identificare un computer in modo univoco usando C #?

Come identificare in modo univoco computer (mainboard) usando C # (. Net / Mono, applicazione locale)?

Edizione. Possiamo identificare la scheda madre in .Net usando qualcosa di simile (vedi Ottieni identificatori di sistema univoci in C # ):

using System.Management; ... ManagementObjectSearcher searcher = new ManagementObjectSearcher("select * from Win32_MotherboardDevice"); ... 

Ma sfortunatamente Mono non supporta System.Management. Come farlo sotto Mono per Linux? – Non lo so 🙁

Che ne dici dell’indirizzo MAC della scheda di rete?

Scrivi una funzione che richiede alcuni parametri hardware univoci come input e genera un hash su di essi.

Ad esempio, l’triggerszione di Windows considera le seguenti caratteristiche hardware:

  • Adattatore schermo
  • Adattatore SCSI
  • Adattatore IDE (effettivamente la scheda madre)
  • Scheda di rete (NIC) e il suo indirizzo MAC
  • Intervallo quantità di RAM (es. 0-64mb, 64-128mb, ecc.)
  • Tipo di processore
  • Numero di serie del processore
  • Dispositivo disco rigido
  • Numero di serie del volume del disco rigido (VSN)
  • CD-ROM / CD-RW / DVD-ROM

Puoi prenderne alcuni per generare il tuo identificatore univoco del computer.

Si prega di consultare: Ottenere identificatori di sistema univoci in C #

Prova questo:

http://carso-owen.blogspot.com/2007/02/how-to-get-my-motherboard-serial-number.html

Personalmente, vorrei andare con il numero di serie del disco rigido. Se una scheda madre muore e viene sostituita, quel PC non è più valido. Se l’unità HDD viene sostituita, non importa troppo perché il software era su di esso.

Ovviamente, d’altra parte, se l’HDD viene spostato altrove, le informazioni lo accompagnano, quindi potresti voler guardare una combinazione di numeri seriali, a seconda di cosa desideri.

Realmente hai MotherboardID, CPUID, Disk Serial e indirizzo MAC, dall’esperienza nessuno di loro sono al 100%.

Le nostre statistiche mostrano

  • Seriale disco mancante 0,1%
  • MAC manca l’1,3%
  • ID scheda madre manca il 30%
  • CPUID manca al 99%

Lo 0,04% delle macchine testate non ha fornito alcuna informazione, non siamo nemmeno riusciti a leggere il nome del computer. Forse si trattava di una specie di istanza di PC virtuale, HyperV o VMWare o forse solo molto bloccata? In ogni caso il tuo design deve essere in grado di far fronte a questi casi.

Il disco seriale è il più affidabile, ma facile da modificare, mac può essere modificato e in base al filtro applicato durante la lettura può cambiare se vengono aggiunti driver di periferica (hyperv, wireshark ecc.).

Scheda madre e CPUID a volte restituiscono valori che non sono validi “NONE”, “AAAA ..”, “XXXX …” ecc.

Dovresti anche notare che queste funzioni possono essere molto lente da chiamare (potrebbero richiedere alcuni secondi anche su un PC veloce), quindi potrebbe valere la pena di buttarle su un thread in background il prima ansible, idealmente non vuoi essere bloccati su di loro.