C# PC 고유 정보(MAC Address, CPU ID, UUID, HDD Serial)를 얻는 방법

우리가 사용하는 컴퓨터(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# PC 고유 정보(MAC Address, CPU ID, UUID, HDD Serial)를 얻는 방법

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를 교체하는 경우 컴퓨터를 구분할 수 있는 고유 식별 정보는 달라지게 됩니다.





이 글이 도움이 되었기를 바랍니다. ^-^
댓글로 흔적을 남겨 주세요.

답글 남기기