none
c#窗体中 如何更换自己电脑的外网IP RRS feed

  • 常规讨论

  • 我在窗体中定义了一个按钮 btnIP   我想实现点击按钮跟换自己的外网ip 请问一下该如何实现呢??

    希望高手给个答复 我的名字就是我QQ  谢谢指点一下初学.NET  还是菜鸟一个

    2014年3月3日 12:10

全部回复

  • 你好:

    可以通过WMI来实现,参考一下这段代码:

    System;
    using System.Management;
    
    namespace WindowsFormsApplication_CS
    {
        class NetworkManagement
        {
            /// <summary>
            /// Set's a new IP Address and it's Submask of the local machine
            /// </summary>
            /// <param name="ip_address">The IP Address</param>
            /// <param name="subnet_mask">The Submask IP Address</param>
            /// <remarks>Requires a reference to the System.Management namespace</remarks>
            public void setIP(string ip_address, string subnet_mask)
            {
                ManagementClass objMC = new ManagementClass("Win32_NetworkAdapterConfiguration");
                ManagementObjectCollection objMOC = objMC.GetInstances();
    
                foreach (ManagementObject objMO in objMOC)
                {
                    if ((bool)objMO["IPEnabled"])
                    {
                        try
                        {
                            ManagementBaseObject setIP;
                            ManagementBaseObject newIP =
                                objMO.GetMethodParameters("EnableStatic");
    
                            newIP["IPAddress"] = new string[] { ip_address };
                            newIP["SubnetMask"] = new string[] { subnet_mask };
    
                            setIP = objMO.InvokeMethod("EnableStatic", newIP, null);
                        }
                        catch (Exception)
                        {
                            throw;
                        }
    
    
                    }
                }
            }
            /// <summary>
            /// Set's a new Gateway address of the local machine
            /// </summary>
            /// <param name="gateway">The Gateway IP Address</param>
            /// <remarks>Requires a reference to the System.Management namespace</remarks>
            public void setGateway(string gateway)
            {
                ManagementClass objMC = new ManagementClass("Win32_NetworkAdapterConfiguration");
                ManagementObjectCollection objMOC = objMC.GetInstances();
    
                foreach (ManagementObject objMO in objMOC)
                {
                    if ((bool)objMO["IPEnabled"])
                    {
                        try
                        {
                            ManagementBaseObject setGateway;
                            ManagementBaseObject newGateway =
                                objMO.GetMethodParameters("SetGateways");
    
                            newGateway["DefaultIPGateway"] = new string[] { gateway };
                            newGateway["GatewayCostMetric"] = new int[] { 1 };
    
                            setGateway = objMO.InvokeMethod("SetGateways", newGateway, null);
                        }
                        catch (Exception)
                        {
                            throw;
                        }
                    }
                }
            }
            /// <summary>
            /// Set's the DNS Server of the local machine
            /// </summary>
            /// <param name="NIC">NIC address</param>
            /// <param name="DNS">DNS server address</param>
            /// <remarks>Requires a reference to the System.Management namespace</remarks>
            public void setDNS(string NIC, string DNS)
            {
                ManagementClass objMC = new ManagementClass("Win32_NetworkAdapterConfiguration");
                ManagementObjectCollection objMOC = objMC.GetInstances();
    
                foreach (ManagementObject objMO in objMOC)
                {
                    if ((bool)objMO["IPEnabled"])
                    {
                        // if you are using the System.Net.NetworkInformation.NetworkInterface you'll need to change this line to if (objMO["Caption"].ToString().Contains(NIC)) and pass in the Description property instead of the name 
                        if (objMO["Caption"].Equals(NIC))
                        {
                            try
                            {
                                ManagementBaseObject newDNS =
                                    objMO.GetMethodParameters("SetDNSServerSearchOrder");
                                newDNS["DNSServerSearchOrder"] = DNS.Split(',');
                                ManagementBaseObject setDNS =
                                    objMO.InvokeMethod("SetDNSServerSearchOrder", newDNS, null);
                            }
                            catch (Exception)
                            {
                                throw;
                            }
                        }
                    }
                }
            }
            /// <summary>
            /// Set's WINS of the local machine
            /// </summary>
            /// <param name="NIC">NIC Address</param>
            /// <param name="priWINS">Primary WINS server address</param>
            /// <param name="secWINS">Secondary WINS server address</param>
            /// <remarks>Requires a reference to the System.Management namespace</remarks>
            public void setWINS(string NIC, string priWINS, string secWINS)
            {
                ManagementClass objMC = new ManagementClass("Win32_NetworkAdapterConfiguration");
                ManagementObjectCollection objMOC = objMC.GetInstances();
    
                foreach (ManagementObject objMO in objMOC)
                {
                    if ((bool)objMO["IPEnabled"])
                    {
                        if (objMO["Caption"].Equals(NIC))
                        {
                            try
                            {
                                ManagementBaseObject setWINS;
                                ManagementBaseObject wins =
                                objMO.GetMethodParameters("SetWINSServer");
                                wins.SetPropertyValue("WINSPrimaryServer", priWINS);
                                wins.SetPropertyValue("WINSSecondaryServer", secWINS);
    
                                setWINS = objMO.InvokeMethod("SetWINSServer", wins, null);
                            }
                            catch (Exception)
                            {
                                throw;
                            }
                        }
                    }
                }
            }


    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
    Click HERE to participate the survey.

    2014年3月4日 2:49
    版主