C# ile IP Adresi ve DNS Değiştirmek

C# ile ManagenemtObject (WMI) kullanarak IP adresi ve DNS bilgilerini değiştirme.

Bilgisayarınızın yerel IP adresini değiştirmek LAN bağlantıları üzerinde veye bir modeme bağlanırken faydalı olabilir.
Bazı Access Point cihazlarına bağlanmak için static bir IP adresi ve bir ağ alt geçidi belirtmeniz gerekebilir.

Şimdi bizim için gerekli olan .NET kütüphanesini projeye referans olarak eklemeliyiz.


using System.Management


Artık IP değiştirme fonksiyonumuzu tanımlayıp kullanabiliriz.


public void SetIP(string IPAddress, string Gateway, string SubnetMask = "255.255.255.0")

{



    ManagementClass objMC = new ManagementClass("Win32_NetworkAdapterConfiguration");



    ManagementObjectCollection objMOC = objMC.GetInstances();



    foreach (ManagementObject objMO in objMOC)

    {



        if (!(bool)objMO["IPEnabled"])

            continue;



        try

        {

            ManagementBaseObject objNewIP = null;

            ManagementBaseObject objSetIP = null;

            ManagementBaseObject objNewGate = null;





            objNewIP = objMO.GetMethodParameters("EnableStatic");

            objNewGate = objMO.GetMethodParameters("SetGateways");



            //Varsayılan Ağ Altgeçidi



            objNewGate["DefaultIPGateway"] = new string[] { Gateway };

            objNewGate["GatewayCostMetric"] = new int[] { 1 };





            //IP Adresi ve Ağ alt maskesi



            objNewIP["IPAddress"] = new string[] { IPAddress };

            objNewIP["SubnetMask"] = new string[] { SubnetMask };



            objSetIP = objMO.InvokeMethod("EnableStatic", objNewIP, null);

            objSetIP = objMO.InvokeMethod("SetGateways", objNewGate, null);



            Console.WriteLine("IP Adresi, SubnetMask ve Default Gateway ayarlandı!");



        }

        catch (Exception ex)

        {

            MessageBox.Show("Hata : " + ex.Message);

        }

    }

}


Bu fonksiyonu SetIP (IP Adresi, Varsayılan Ağ Alt Geçidi, Ağ Alt Maskesi) şeklinde kullanabilirsiniz.
Ağ alt maskesi varsayılan olarak 255.255.255.0 dır.

DNS adresi de benzer bir metodla değiştirilir.

public void SetDns(string dns1, string dns2)

{

    ManagementClass mc = new ManagementClass("Win32_NetworkAdapterConfiguration");



    ManagementObjectCollection moc = mc.GetInstances();



    string nic = String.Empty;



    foreach (ManagementObject mo in moc)

    {

        if (!(bool)mo["IPEnabled"])

            continue;

        

        nic = mo["Caption"].ToString();



        if (mo["Caption"].Equals(nic))

        {

            ManagementBaseObject DnsEntry = mo.GetMethodParameters("SetDNSServerSearchOrder");



            string dnsler = dns1 + "," + dns2;



            DnsEntry["DNSServerSearchOrder"] = dnsler.Split(',');



            ManagementBaseObject DnsMbo = 

                mo.InvokeMethod("SetDNSServerSearchOrder", DnsEntry, null);



            int returnCode = int.Parse(DnsMbo["returnvalue"].ToString());



            if (returnCode == 0)

                MessageBox.Show("Dns adresi değiştirildi.");



            break;

        }

    }

}


Bu metodu da SetDNS(Dns Adresi, Alternatif Dns Adresi) şeklinde kullanabilirsiniz.

Alternatif Yol

Bu işlemleri alternatif olarak komut konsolu üzerinden de gerçekleştirebilirsiniz.

Bunun için komut satırında (cmd) netsh komutunu kullanabiliriz.

Bu komut modemden otomatik IP almanızı sağlayacaktır.


string arayuz = System.Net.NetworkInformation.NetworkInterface.GetAllNetworkInterfaces()[0].Name;

Process.Start("netsh", "interface ipv4 set address name=\"" + arayuz + "\" source=dhcp");


Diğer netsh komutları için;

http://technet.microsoft.com/tr-tr/library/cc778925(v=ws.10).aspx adresini ziyaret edebilirsiniz.
  • Etiketler;
Yorum Yaz

Yorum yazabilmek için üye girişi yapmanız gerekiyor!

Yukarı Git