반응형

음.. 오늘 또 어느분께서 WMI를 이용해서 IP주소를 알아내는 방법에 대해서 질문하셨습니다.

그래서 간단하게.. WMI를 이용해서 IP주소를 포함한.. 다른 시스템 정보를 받아오는 방법에 대해서 알아보도록 하겠습니다.

.NET기반 에서는 System.Management 를 참조함으로써 사용할 수 있게 됩니다.

 

우선 위 클래스 사용을 위해서 참조를 추가합니다.

 

 

그리고 사용하기 원하는 파일에서

 

using System.Management;

 

간단하게 코드를 통해서 알아보도록 하겠습니다.

저는 드라이버의 Volume Serial Number, CUP ID(Processor ID), NIC카드의 On/Off여부, MAC/IP Address를 알아오는 것에 대해서 해보았습니다.

 

 

 Volume Serial Number 알아오기

 

 

        private String GetVolumeSerialNumber(String Drive)
        {
            String strVolumeSerialNumber = String.Empty;
            ObjectQuery objQuery = new ObjectQuery("SELECT VolumeSerialNumber FROM Win32_LogicalDisk WHERE Name='" + Drive + ":'");
            ManagementObjectSearcher mobjSearcher = new ManagementObjectSearcher(objQuery);

            try
            {
                foreach (ManagementObject obj in mobjSearcher.Get())
                {
                    strVolumeSerialNumber = obj["VolumeSerialNumber"].ToString();
                    break;
                }
            }
            catch(Exception e)
            {
                MessageBox.Show(e.Message);
                strVolumeSerialNumber = String.Empty;
            }

            return strVolumeSerialNumber;
        }

 

 사용예

 

String strVolumeSerial = GetVolumeSerialNumber("C"); //C드라이브의 시리얼 번호 가져오기

 

 

 

인터넷 연결 여부 가져오기

 

        private bool GetNetConnectionStatus()
        {
            return SystemInformation.Network;
        }

 

 

true = 연결됨

false = 연결안됨 

 

 

 

 

 NIC의 MAC Address 가져오기

 

 

        private String GetMACAddress()
        {
            String strMACAddress = String.Empty;

            if (GetNetConnectionStatus())
            {
                ObjectQuery objQuery = new ObjectQuery("SELECT NetConnectionStatus, MacAddress FROM Win32_NetworkAdapter");
                ManagementObjectSearcher mobjSearcher = new ManagementObjectSearcher(objQuery);

                try
                {
                    foreach (ManagementObject obj in mobjSearcher.Get())
                    {
                        if (obj["NetConnectionStatus"] != Convert.DBNull)
                        {
                            if (Convert.ToInt32(obj["NetConnectionStatus"].ToString()) == 2)
                            {
                                strMACAddress = obj["MACAddress"].ToString();
                                break;
                            }
                        }
                    }
                }
                catch (Exception e)
                {
                    MessageBox.Show(e.Message);
                    strMACAddress = String.Empty;
                }
            }

            return strMACAddress;
        }

 

 사용예

 

String strMacAddress = GetMACAddress();

 

 

 

 

 Network정보 가져오기 (IP주소)

 

현재는 IP주소만 명시했지만, 이를 이용해 Win32_NetworkAdapterConfiguration를 이용하면 Subnetmask, DefaultGateway등.. 다른 정보도 가져오거나 편집할 수 있습니다.

 

 

        private String GetIpAddress()
        {
            String strIpAddress = String.Empty;

            ObjectQuery objQuery = new ObjectQuery("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled='True'");
            ManagementObjectSearcher mobjSearcher = new ManagementObjectSearcher(objQuery);

            try
            {
                foreach (ManagementObject obj in mobjSearcher.Get())
                {
                    strIpAddress = ((String[])obj["IPAddress"])[0];
                    break;
                }
            }
            catch (Exception e)
            {
                MessageBox.Show(e.Message);
                strIpAddress = String.Empty;
            }

            return strIpAddress;
        }

 

 사용예

 

String strIpAddress = GetIpAddress();

 

 

간단하게 살펴보았는데요..

기본적으로 WMI라고 하여도.. 쿼리문을 이용해서 해당 정보를 조회하거나 설정하는 형태입니다.

좀 더 많은 정보를 원하시면 WQL(WMI for SQL)을 찾아 적용하시면 됩니다.

 

 

반응형

+ Recent posts