우리가 사용하는 컴퓨터(PC)에는 저 마다 고유한 정보를 가지고 있습니다. 이러한 고유한 정보를 이용해서 컴퓨터를 서로 구분하고 다양한 용도로 활용할 수 있습니다.
컴퓨터(PC)를 구분하는 고유 정보에는 랜 카드의 MAC Address(맥 주소), CPU의 Processor ID, 컴퓨터 시스템의 UUID(Universally Unique Identifier, 범용 고유 식별자), 그리고 하드디스크의 시리얼 번호 (Volume Serial Number)등이 있습니다.
이러한 고유키 또는 고유 식별자를 하나 또는 두 개 이상 활용하여 각 컴퓨터를 구분 짓는 고유키 값을 생성해서 사용할 수 있습니다.
앞에서 설명한 고유 정보들은 운영체제(OS)를 다시 설치해도 변하지 않는 고유 정보에 해당합니다.
이번 글에서는 C# PC 고유 정보(MAC Address, CPU ID, UUID, HDD Serial)를 얻는 방법에 대해 알아보겠습니다.
▼ 아래 C# 예제에 대한 실행 결과 화면입니다.
C# MAC Address(MAC 어드레스) 가져오기
LAN 카드에는 고유한 ‘맥어드레스‘라는 정보를 가지고 있습니다. 컴퓨터에 설치된 LAN 카드는 좀처럼 바꾸는 경우가 없기 때문에 컴퓨터를 구분하는 고유 정보로 ‘맥어드레스‘를 활용할 수 있습니다.
▼ C#에서 Mac Address 정보를 가져오는 예제입니다.
- NetworkInterface 클래스를 사용하기 위해 using System.Net.NetworkInformation; 선언해 주었습니다.
using System.Net.NetworkInformation; public Form1() { InitializeComponent(); textMacAddress.Text = GetMacAddress(); } private string GetMacAddress() { string macAddress = string.Empty; NetworkInterface[] networkInterfaces = NetworkInterface.GetAllNetworkInterfaces(); foreach (NetworkInterface ni in networkInterfaces) { if (ni.NetworkInterfaceType == NetworkInterfaceType.Ethernet || ni.NetworkInterfaceType == NetworkInterfaceType.Wireless80211) { macAddress = ni.GetPhysicalAddress().ToString(); break; } } return macAddress; } |
C# 하드디스크(HDD) Serial Number 가져오기
하드디스크(HDD)에는 각 제조사에서 부여한 고유 시리얼번호 정보를 가지고 있습니다. 하드디스크의 ‘시리얼번호‘를 사용하여 컴퓨터를 구분하는데 활용할 수 있습니다.
▼ C#에서 하드디스크의 시리얼번호를 가져오는 첫 번째 방법입니다.
- ManagementObjectSearcher 클래스를 사용하기 위해 using System.Management; 선언해 주었습니다.
- using System.Management; 선언을 위해 참조에 System.Management를 추가해 주어야 합니다.
using System.Management; public Form1() { InitializeComponent(); textHDDSerial.Text = GetHDDSerail(); } private string GetHDDSerail() { string serialNumber = string.Empty; ManagementObjectSearcher mos = new ManagementObjectSearcher(“SELECT SerialNumber FROM Win32_DiskDrive WHERE MediaType = ‘Fixed hard disk media'”); foreach (ManagementObject mo in mos.Get()) { serialNumber = mo[“SerialNumber”].ToString().Trim(); break; } return serialNumber; } |
▼ C#에서 하드디스크의 시리얼번호를 가져오는 두 번째 방법입니다.
using System.Management; public Form1() { InitializeComponent(); textHDDSerial2.Text = GetHDDSerail2(); } private string GetHDDSerail2() { string serialNumber = string.Empty; ManagementObject dsk = new ManagementObject(@“win32_logicaldisk.deviceid=”“” + @“C:”“”); dsk.Get(); serialNumber = dsk[“VolumeSerialNumber”].ToString(); return serialNumber; } |
C# 마더보드(Mother Borad, 메인보드) Serial Number 가져오기
컴퓨터 메인보드(Mother Borad, 마더보더, M/B)의 시리얼번호를 사용하여 컴퓨터를 구분하는데 활용할 수 있습니다.
▼ C#에서 마더보드(메인보드)의 시리얼번호를 가져오는 방법입니다.
- 윈도우 OS 버전에 따라 제대로 된 시리얼번호를 못 가져오는 경우가 있습니다.
using System.Management; public Form1() { InitializeComponent(); textMotherBoardID.Text = GetMotherBoardID(); } private string GetMotherBoardID() { string serialNumber = string.Empty; ManagementObjectSearcher mos = new ManagementObjectSearcher(“SELECT * FROM Win32_BaseBoard”); ManagementObjectCollection information = mos.Get(); foreach (ManagementObject mo in information) { serialNumber = mo[“SerialNumber”].ToString(); break; } return serialNumber; } |
C# UUID(Universally Unique Identifier, 범용 고유 식별자) 가져오기
컴퓨터 시스템의 UUID(Universally Unique Identifier, 범용 고유 식별자)를 사용하여 컴퓨터를 구분하는데 활용할 수 있습니다.
UUID는 윈도우 OS에서 하드웨어나 시스템 구성 등에 따라 고유하게 생성되는 값입니다. 따라서 윈도우 OS를 새로 설치하는 경우 UUID 값은 변경될 수 있습니다.
▼ C#에서 UUID(Universally Unique Identifier, 범용 고유 식별자)를 가져오는 방법입니다.
using System.Management; public Form1() { InitializeComponent(); textUUID.Text = GetUUID(); } private string GetUUID() { string uuid = string.Empty; ManagementObjectSearcher mos = new ManagementObjectSearcher(“SELECT UUID FROM Win32_ComputerSystemProduct”); foreach (ManagementObject mo in mos.Get()) { uuid = mo[“UUID”].ToString(); break; } return uuid; } |
C# 컴퓨터 CPU ID(Processor ID) 가져오기
컴퓨터에 설치된 CPU의 Processor ID를 사용하여 컴퓨터를 구분하는데 활용할 수 있습니다.
▼ C#에서 CPU ID(Processor ID)를 가져오는 방법입니다.
using System.Management; public Form1() { InitializeComponent(); textCPUID.Text = GetCPUID(); } private string GetCPUID() { string processorID = string.Empty; ManagementClass management = new ManagementClass(“win32_processor”); ManagementObjectCollection moc = management.GetInstances(); foreach (ManagementObject mo in moc) { if (processorID == “”) { //첫 번째 CPU의 ID를 선택함 processorID = mo.Properties[“processorID”].Value.ToString(); break; } } return processorID; } |
마무리
컴퓨터의 고유 정보를 활용하여 고유한 라이센스키를 생성하거나 컴퓨터를 식별하는데 유용하게 활용할 수 있습니다.
하나의 고유 정보를 사용하는 것도 크게 문제가 없지만 더욱 엄격한 식별 정보를 만들기 위해서는 두 개 이상의 고유 정보를 조합해서 만드는 것도 좋은 방법이 될 수 있습니다.
당연한 이야기 이지만 LAN 카드를 교체하거나 메인보드를 교체하거나 CPU를 교체하거나 HDD를 교체하는 경우 컴퓨터를 구분할 수 있는 고유 식별 정보는 달라지게 됩니다.
※ 함께 읽으면 도움이 될 만한 다른 포스팅 글입니다.
♥ 이 글이 도움이 되었기를 바랍니다. ^-^
댓글로 흔적을 남겨 주세요.