Net Adapter

该代码示例是一个Windows窗体应用,用于选择并设置网络适配器的IP地址、子网掩码、网关和DNS。它使用`NetworkInterface`类获取网络接口信息,并通过WMI(WindowsManagementInstrumentation)来设置IP配置。用户界面包括ComboBox用于选择网卡,以及TextBox输入IP相关参数。程序在设置成功或失败时会显示消息框通知用户。
摘要由CSDN通过智能技术生成
  • 需要管理员 运行

  • UI winform(

  • Combo :AdapterSelector ,

  • Button:button1

  • TextBox:IpAddress,subnetMask,Gateway,DNS )

public partial class frmNetAdapter : Form
    {
        private MyNetAdapter mynet = new MyNetAdapter();
        public frmNetAdapter()
        {
            InitializeComponent();
        }
        private void button1_Click(object sender, EventArgs e)
        {
            string content = ((ComboBoxItem)AdapterSelector.SelectedItem).Content.ToString();
            string name = content.Replace("System.Windows.Controls.ComboBoxItem: ", "");

            NetAdapter info = new NetAdapter();
            info.IP = IpAddress.Text;
            info.IPMask = subnetMask.Text;
            info.GateWay = Gateway.Text;

            if (mynet.setIP(name, info))
            {
                MessageBox.Show("设置成功!");
            }
            else
            {
                MessageBox.Show("设置失败!");
            };           
        }
        
        private void frmNetAdapter_Load(object sender, EventArgs e)
        {
            foreach (NetworkInterface adapter in mynet.adapters)
            {
                string Name = adapter.Name;
                AdapterSelector.Items.Add(Name);
            }
        }
       
        private void AdapterSelector_SelectedIndexChanged(object sender, EventArgs e)
        {
            string name = AdapterSelector.SelectedItem.ToString(); 
            GetAdapterInfo(name);
        }


        private void GetAdapterInfo(string name)
        {
            NetAdapter info = mynet.GetAdapterInfo(name);
            IpAddress.Text = info.IP;
            subnetMask.Text = info.IPMask;
            Gateway.Text = info.GateWay;
            DNS.Text = info.DNS;

        }       
    }
  • 网卡类

namespace TestFormAPP
{
    class MyNetAdapter
    {
        public List<NetworkInterface> adapters;  //当修改网卡后 需要重新加载 该清单
        public MyNetAdapter()
        {
            GetAllNetInterface();
        }

        private void GetAllNetInterface()  //当网卡修改后 需要重新加载 该清单
        {
            adapters = GetAllNetAdapter();   
        }

        private List<NetworkInterface> GetAllNetAdapter()
        {
            List<NetworkInterface> list = new List<NetworkInterface>();
            foreach (NetworkInterface adapter in NetworkInterface.GetAllNetworkInterfaces())
            {
                list.Add(adapter);
            }
            return list;
        }
       
        private string GetGateWay(IPInterfaceProperties ip)
        {
            string gateWay = "";
            GatewayIPAddressInformationCollection gateways = ip.GatewayAddresses;
            foreach (GatewayIPAddressInformation gateway in gateways) //一般情况 只有一个
            {
                gateWay = gateway.Address.ToString();  

                //if (IsPingIP(gateway.Address.ToString()))   //可以测试是否 在线
                //{
                //    gateWay = gateway.Address.ToString();
                //    break;
                //}
            }
            return gateWay;
        }

        private NetworkInterface GetAdapterByName(string name)
        {
            NetworkInterface adapter = null;
            foreach (NetworkInterface adapter2 in adapters)
            {
                if (adapter2.Name == name)
                {
                    adapter = adapter2;
                    break;
                }
            }
            return adapter;
        }


        public List<string> getAllAdapter()
        {
            List<string> list = new List<string>();
            foreach (NetworkInterface adapter in adapters)
            {
                string Name = adapter.Name;
                list.Add(Name);
            }
            return list;
        }



        #region  net adapter information
        private bool SetIP(NetworkInterface adapter, string[] ip, string[] submask, string[] gateway, string[] dns)
        {
            ManagementClass mc = new ManagementClass("Win32_NetworkAdapterConfiguration"); //注意这里是Win32_NetworkAdapterConfiguration
            ManagementObjectCollection moc = mc.GetInstances();
            string str = "";
            foreach (ManagementObject m in moc)
            {
                /*if (!(bool)m["IPEnabled"])     continue;*/
                if (m["SettingID"].ToString() == adapter.Id)
                {
                    //IP与子网掩码
                    if (ip != null && submask != null)
                    {
                        ManagementBaseObject inPar;
                        ManagementBaseObject outPar;
                        string caption = m["Caption"].ToString();
                        //注意这里是EnableStatic
                        inPar = m.GetMethodParameters("EnableStatic");
                        //注意ip数组中不能有null;
                        inPar["IPAddress"] = ip;
                        //注意submask数组中不能有null;
                        inPar["SubnetMask"] = submask;
                        outPar = m.InvokeMethod("EnableStatic", inPar, null);
                        str = outPar["returnvalue"].ToString();
                        //0或1说明设置成功;
                        //返回值说明网址: https://msdn.microsoft.com/en-us/library/aa393301(v=vs.85).aspx
                        if (str != "0" && str != "1")
                        {
                            return false;
                        }
                    }
                    //网关
                    if (gateway != null)
                    {
                        ManagementBaseObject inPar;
                        ManagementBaseObject outPar;
                        string caption = m["Caption"].ToString();
                        //注意这里是SetGateways;
                        inPar = m.GetMethodParameters("SetGateways");
                        //注意gateway数组中不能有null;
                        inPar["DefaultIPGateway"] = gateway;
                        outPar = m.InvokeMethod("SetGateways", inPar, null);
                        str = outPar["returnvalue"].ToString();
                        if (str != "0" && str != "1")
                        {
                            return false;
                        }
                    }
                    //DNS
                    if (dns != null)
                    {
                        ManagementBaseObject inPar;
                        ManagementBaseObject outPar;
                        //注意这里是SetDNSServerSearchOrder;
                        inPar = m.GetMethodParameters("SetDNSServerSearchOrder");
                        //注意dns数组中不能有null;
                        inPar["DNSServerSearchOrder"] = dns;
                        outPar = m.InvokeMethod("SetDNSServerSearchOrder", inPar, null);
                        str = outPar["returnvalue"].ToString();
                        if (str != "0" && str != "1")
                        {
                            return false;
                        }
                    }

                    GetAllNetInterface();   //修改后 清单发生变化
                    return true;
                }
            }
            return false;
        }

        /// <summary>
        /// config Net Adapter
        /// </summary>
        /// <param name="Name">Net Adapter Name</param>
        /// <param name="netInfo"></param>
        /// <returns></returns>
        public bool setIP(string name, NetAdapter netInfo)
        {
            string[] ip = null;
            if (netInfo.IP != "")
            { ip = new string[] { netInfo.IP }; }

            string[] submask = null;
            if (netInfo.IPMask != "")
            { submask = new string[] { netInfo.IPMask }; }

            string[] gateway = null;
            if (netInfo.GateWay != "")
            { gateway = new string[] { netInfo.GateWay }; }
            string[] dns = null;
            if (netInfo.DNS != "")
            {
                if (netInfo.DNS2 != "")
                { dns = new string[] { netInfo.DNS, netInfo.DNS2 }; }
                else
                { dns = new string[] { netInfo.DNS }; }
            }
            NetworkInterface adapter = GetAdapterByName(name);
            return SetIP(adapter, ip, submask, gateway, dns);
        }
        /// <summary>
        /// get net adapter information
        /// </summary>
        /// <param name="name"></param>
        /// <returns></returns>
        public NetAdapter GetAdapterInfo(string name)
        {
            NetAdapter info = new NetAdapter();
            NetworkInterface adapter = GetAdapterByName(name);
            IPInterfaceProperties ip = adapter.GetIPProperties();
            UnicastIPAddressInformationCollection ipCollection = ip.UnicastAddresses;
            foreach (UnicastIPAddressInformation item in ipCollection)
            {
                //IPv4过滤
                if (item.Address.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork)
                {
                    //IpAddress、subnetMask是TextBox类,UI展示;
                    info.IP = item.Address.ToString();
                    info.IPMask = item.IPv4Mask.ToString();
                }
            }
            //DNS
            if (ip.DnsAddresses.Count > 0)
            {
                info.DNS = ip.DnsAddresses[0].ToString();
                if (ip.DnsAddresses.Count > 1)
                {
                    info.DNS2 = ip.DnsAddresses[1].ToString();
                }
                else
                {
                    info.DNS2 = "";
                }
            }
            else
            {
                info.DNS = "";
                info.DNS2 = "";
            }

            info.GateWay = GetGateWay(ip);

            //MAC
            PhysicalAddress pa = adapter.GetPhysicalAddress();
            byte[] bytes = pa.GetAddressBytes();
            StringBuilder sb = new StringBuilder();
            //十六转换
            for (int i = 0; i < bytes.Length; i++)
            {
                sb.Append(bytes[i].ToString("X2"));
                if (i != bytes.Length - 1)
                {
                    sb.Append('-');
                }
            }

            info.MAC = sb.ToString();

            return info;

        }


        #endregion



        #region enableAdapter disAdapter
        private ManagementObject GetNetwork(NetworkInterface adapter)
        {
            string netState = "SELECT * From Win32_NetworkAdapter"; //注意这里是Win32_NetworkAdapter,不是Win32_NetworkAdapterConfiguration
            ManagementObjectSearcher searcher = new ManagementObjectSearcher(netState);
            ManagementObjectCollection moc = searcher.Get();
            /*MessageBox.Show(adapter.Description);*/
            foreach (ManagementObject m in moc)
            {
                /*MessageBox.Show(m["Name"].ToString());*/
                if (m["Name"].ToString() == adapter.Description) //注意这里的Name是与adapter的Description相对应的。
                {
                    return m;
                }
            }
            return null;
        }
        /// <summary>
        /// enable/disable Net Adapter
        /// </summary>
        /// <param name="enable">enable/disable</param>
        /// <param name="name">NetAdapter Name</param>
        /// <returns></returns>
        public bool AdapterEn(bool enable, string name)
        {
            NetworkInterface adapter = GetAdapterByName(name);
            ManagementObject mo = GetNetwork(adapter);

            string cmd = enable ? "Enable" : "Disable";
            try
            {
                mo.InvokeMethod(cmd, null);
                mo = null;
                adapter = null;
                return true;
            }
            catch
            {
                mo = null;
                adapter = null;
                return false;
            }

        }

        #endregion



        public bool IsPingIP(string ip)
        {
            try
            {
                Ping ping = new Ping();
                PingReply reply = ping.Send(ip, 1000);
                if (reply != null) { return true; } else { return false; }
            }
            catch
            {
                return false;
            }
        }

    }


    public class NetAdapter
    {
        public string IP { get; set; }
        public string IPMask { get; set; }
        public string GateWay { get; set; }
        public string DNS { get; set; }
        public string DNS2 { get; set; }
        public string MAC { get; set; }


    }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值