본문 바로가기

C# 문법

[C#] IP, SubnetMask, Gateway 정보 가져오기

WMI(Windows Management Instrumentation)

  • WIM는 Window 기반 운영체제에서 사용되는 관리데이터입니다. WMI를 이용하면, 시스템의 모든 하드웨어에 대한 정보에 접근할 수 있습니다.

    ManagementObjectSearcher

  • 지정된 쿼리에 따라 관리 개체의 컬렉션을 검색합니다. 예를 들어, 이 클래스를 상용하여 시스템의 모든 디스크 드라이브, 네트워크 어댑터 등을 쿼리할 수 있습니다.
  • WMI를 사용하기 위해서 System.Management dll를 추가해 주셔야 합니다.

IP, SubnetMask, Gateway, DNS Server, MacAddress 검색기

private void btnIP_Click(object sender, EventArgs e)
{
    ManagementObjectSearcher ipAddress = 
        new ManagementObjectSearcher("Select * from Win32_NetworkAdapterConfiguration Where IPEnabled = 'True'");

    foreach( ManagementObject obj in ipAddress.Get())
    {
        if(obj["IPAddress"] != null)
            if(obj["IPAddress"] is Array)
            {
                //WMI 인스턴스의 ["IPAddress"]에 해당하는 값을 string 배열로 Casting
                //0 번쨰가 ip에 해당한다.
                tbIP.Text = ((string[])obj["IPAddress"])[0];
                tbIP.TextAlign = HorizontalAlignment.Center;

                // Subnet Mask 를 가지고 올때, 만약 string[] 과 같은 형식 캐스팅이 불안하다면,
                // 이와 같이 Linq의 OfType로 형식을 확인후 진행이 가능하다.
                var subnetMask = ((IEnumerable)obj["IPSubnet"]).OfType<string>()
                    .Select(f => f.ToString()).ToList();
                tbSubnetMask.Text = subnetMask[0];
                tbSubnetMask.TextAlign = HorizontalAlignment.Center;

                tbGateway.Text = ((string[])obj["DefaultIPGateway"])[0];
                tbGateway.TextAlign = HorizontalAlignment.Center;

                tbDNS.Text = $"{((string[])obj["DNSServerSearchOrder"])[0]}";
                tbDNS.TextAlign = HorizontalAlignment.Center;

                tbMack.Text = $"{obj["MACAddress"]}";
                tbMack.TextAlign = HorizontalAlignment.Center;
            }
    }    
}

결과

image

실제 IP와 일치 하는지 보겠습니다.

내 컴터 아이피

참고 사이트