关于最近给一家企业做的文档保全系统的技术整理(4)
5、通过WMI获取和设置本地IP、网关、DNS等信息
首先要添加System.Management这个DLL文件的引用
code private static ManagementObjectSearcher query; private static ManagementObjectCollection queryCollection; private static ManagementClass wmi; private static ManagementObjectCollection moc; private static ManagementBaseObject inPar; private static ManagementBaseObject outPar; private static string[] DefaultDNS = new string[] { "1.0.1.0","1.0.1.0" };
关于类定义的代码我就不贴了,上面是该类中用到的一些对象。
下面是相关方法的代码:
code /// <summary> /// 设置IP地址,掩码,网关和DNS /// </summary> /// <param name="ip"></param> /// <param name="submask"></param> /// <param name="getway"></param> /// <param name="dns"></param> public static void SetIPAddress(string[] ip, string[] submask, string[] getway, string[] dns) { wmi = new ManagementClass("Win32_NetworkAdapterConfiguration"); moc = wmi.GetInstances(); inPar = null; outPar = null; foreach (ManagementObject mo in moc) { //如果没有启用IP设置的网络设备则跳过 if (!(bool)mo["IPEnabled"]) continue; //设置IP地址和掩码 if (ip != null && submask != null) { inPar = mo.GetMethodParameters("EnableStatic"); inPar["IPAddress"] = ip; inPar["SubnetMask"] = submask; outPar = mo.InvokeMethod("EnableStatic", inPar, null); } //设置网关地址 if (getway != null) { inPar = mo.GetMethodParameters("SetGateways"); inPar["DefaultIPGateway"] = getway; outPar = mo.InvokeMethod("SetGateways", inPar, null); } //设置DNS地址 if (dns != null) { inPar = mo.GetMethodParameters("SetDNSServerSearchOrder"); inPar["DNSServerSearchOrder"] = dns; outPar = mo.InvokeMethod("SetDNSServerSearchOrder", inPar, null); } } }
该方法用于设置本地的相关ip信息。
获取的方法如下:
code public static string[] GetIP() { query = new ManagementObjectSearcher("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = 'TRUE'"); queryCollection = query.Get(); foreach (ManagementObject mo in queryCollection) { return (string[])mo["IPAddress"]; } return null; } public static string[] GetGetWay() { query = new ManagementObjectSearcher("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = 'TRUE'"); queryCollection = query.Get(); foreach (ManagementObject mo in queryCollection) { return (string[])mo["DefaultIPGateway"]; } return null; } public static string[] GetDNS() { query = new ManagementObjectSearcher("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = 'TRUE'"); queryCollection = query.Get(); foreach (ManagementObject mo in queryCollection) { return (string[])mo["DNSServerSearchOrder"]; } return null; }
设置ip和dns为自动获取dhcp分配的方法:
code /// <summary> /// 启用DHCP服务器 /// </summary> public static void EnableDHCP() { wmi = new ManagementClass("Win32_NetworkAdapterConfiguration"); moc = wmi.GetInstances(); foreach (ManagementObject mo in moc) { //如果没有启用IP设置的网络设备则跳过 if (!(bool)mo["IPEnabled"]) continue; //重置DNS为空 mo.InvokeMethod("SetDNSServerSearchOrder", null); //开启DHCP mo.InvokeMethod("EnableDHCP", null); } }
说明:如果你设置了本地的网关或者dns信息后,需要将本地的ip配置该为DHCP分配的时候直接调用EnableDHCP无效的。你需要先重新设置下ip再调用EnableDHCP才有效。
code SetIPAddress(new string[] { "1.1.1.1" }, new string[] { "255.0.0.0" }); EnableDHCP();
另外测试显示,在部分xp笔记本电脑上功能无效,可能是操作系统的版本问题。
浙公网安备 33010602011771号