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;
}
}
}
결과
실제 IP와 일치 하는지 보겠습니다.
참고 사이트