
با استفاده از 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!");
}

