2012-02-26 3 views
1

Я занимаюсь разработкой библиотеки в C#, который генерирует уникальный идентификатор оборудования, используя эти 3 переменныеОпределить серийный номер жесткого диска в моно?

  1. Имя машины
  2. MAC адрес
  3. Жесткий диск серийный номер

Я могу получить имя машины и MAC-адрес в .NET и Mono, но я могу получить серийный номер жесткого диска в .NET. Кто-нибудь знает, есть ли какой-либо возможный способ получить серийный номер жесткого диска в моно или мне нужно использовать другую переменную (то есть: имя процессора, идентификатор материнской платы и т. Д.)?

+0

Обратите внимание, что и имя компьютера и MAC-адрес вручную могут быть установлены, так что они не являются действительно уникальными. –

+0

GUID основан на MAC-адресе ... – ub3rst4r

+0

И MAC-адрес может быть подделан: http://osxdaily.com/2008/01/17/how-to-spoof-your-mac-address-in-mac -os-x/Вы не можете считать, что он уникален для конкретного интерфейса Ethernet на конкретном компьютере. –

ответ

1

По this documentation:

Mac OS X не поддерживает получение жесткого диска серийный номер приложения пользовательского уровня

Если требование быть корень на макинтош не является проблемой для вы (или пропустить версию макинтош), у меня есть один перебор способ решить эту проблему:

Использование this article или this вопрос вы можете определить:

  1. Вы используете Mono или .NET
  2. Какую платформу вы на

Если вы знаете, в системе Linux, вы можете получить Hardrive серийник через running такой system command:

/sbin/udevadm info --query=property --name=sda 

На mac вы можете использовать Disk Utility (как root), чтобы получить серийный номер жесткого диска. В окнах вы можете использовать стандартный подход.

+0

Спасибо! Возможно, мне придется вернуться к другой переменной для причины уникального идентификатора MAC OSX. – ub3rst4r

1

Вы можете получить также с разрешения пользователя с ioreg

из оболочки:

ioreg -p IOService -n AppleAHCIDiskDriver -r | Grep \ "Серийный номер \" | AWK «{печать $ NF ;}»

программно:

uint GetVolumeSerial(string rootPathName) 
    { 
     uint volumeSerialNumber = 0; 
     ProcessStartInfo psi = new ProcessStartInfo(); 
     psi.FileName = "/usr/sbin/ioreg"; 
     psi.UseShellExecute = false; 
     psi.Arguments = "-p IOService -n AppleAHCIDiskDriver -r -d 1"; 
     psi.RedirectStandardOutput = true; 
     Process p = Process.Start(psi); 
     string output; 
     do 
     { 
      output = p.StandardOutput.ReadLine(); 
      int idx = output.IndexOf("Serial Number"); 
      if (idx != -1) 
      { 
       int last = output.LastIndexOf('"'); 
       int first = output.LastIndexOf('"', last - 1); 
       string tmp = output.Substring(first + 1, last - first - 1); 
       volumeSerialNumber = UInt32.Parse(tmp); 
       break; 
      } 
     } while (!p.StandardOutput.EndOfStream); 
     p.WaitForExit(); 
     p.Close(); 
     return volumeSerialNumber; 
    } 
Смежные вопросы