با استفاده از C # روی کتابخانه دات نت ، چگونه می توانیم سرورهای DNS را روی “دستیابی خودکار” تنظیم کنیم؟ می توانیم آدرس های IP را روی مقادیر دلخواه تنظیم کرد ؟
روش اول
اطلاعات درج شده در قسمت زیر نیازمند تایید و بررسی بیشتری هستند .
ManagementClass mClass = new ManagementClass("Win32_NetworkAdapterConfiguration"); ManagementObjectCollection mObjCol = mClass.GetInstances(); foreach (ManagementObject mObj in mObjCol) { if ((bool)mObj["IPEnabled"]) { ManagementBaseObject mboDNS = mObj.GetMethodParameters("SetDNSServerSearchOrder"); if (mboDNS != null) { mboDNS["DNSServerSearchOrder"] = null; mObj.InvokeMethod("SetDNSServerSearchOrder", mboDNS, null); } } }
کافیست بخش DNSServerSearchOrder را روی null تنظیم کنید.
توجه داشته باشید که برای تست صحیح برنامه می بایست فایل exe ایجاد شده به طریق RUN AS ADMINISTRATOR اجرا شود .
روش دوم
این روش صحیح تر است و از تابع ای به نام GetLocalIPAddress برای پردازش وضعیت شبکه استفاده شده است .
قطعه کدی که در زیر مشاهده می کنید توسط برنامه کامپایلر به جهت تست آزمایش شده و خروجی صحیح مدنظر را بدست آورد.
public void change_dns() { GetLocalIPAddress(); ManagementClass mClass = new ManagementClass("Win32_NetworkAdapterConfiguration"); ManagementObjectCollection mObjCol = mClass.GetInstances(); foreach (ManagementObject mObj in mObjCol) { if ((bool)mObj["IPEnabled"]) { ManagementBaseObject mboDNS = mObj.GetMethodParameters("SetDNSServerSearchOrder"); if (mboDNS != null) { mboDNS["DNSServerSearchOrder"] = null; mObj.InvokeMethod("SetDNSServerSearchOrder", mboDNS, null); } } } }
public void GetLocalIPAddress() { var host = Dns.GetHostEntry(Dns.GetHostName()); foreach (var ip in host.AddressList) { if (ip.AddressFamily == AddressFamily.InterNetwork) { listBox1.Items.Add(ip.ToString()); } } listBox1.Items.Add("No network adapters with an IPv4 address in the system!"); }