C#实现获取设置IP地址小工具
更新时间:2020年6月25日 11:28 点击:1617
界面效果图如下:
报表界面
说下关键代码
需要开启 Windows Management Instrumentation服务(默认已经开启),在程序中需要增加 Management引用。
主要有NetworkAdapter(保存适配器的IP地址,网关,子网掩码,设置IP方面等 ),NetworkAdapterUtil(主要是NetworkAdapter类的集合 )两个类。
在windows8 需要在app.manifest文件中
修改配置 <requestedExecutionLevel level="requireAdministrator" uiAccess="false" />,不然就算有管理员权限也修改不了IP地址。
1 设置IP地址的代码。(设置IP地址,修改IP地址需要管理员权限)
/// <summary> /// 网络适配器类 /// </summary> public class NetworkAdapter { /// <summary> /// 设置IP地址 /// </summary> /// <param name="ip"></param> /// <param name="submask"></param> /// <param name="getway"></param> /// <param name="dns"></param> private bool SetIPAddress(string[] ip, string[] submask, string[] getway, string[] dns) { ManagementClass wmi = new ManagementClass("Win32_NetworkAdapterConfiguration"); ManagementObjectCollection moc = wmi.GetInstances(); ManagementBaseObject inPar = null; ManagementBaseObject outPar = null; string str = ""; foreach (ManagementObject mo in moc) { if (!(bool)mo["IPEnabled"]) continue; if (this.NetworkInterfaceID == mo["SettingID"].ToString()) { if (ip != null && submask != null) { string caption = mo["Caption"].ToString(); //描述 inPar = mo.GetMethodParameters("EnableStatic"); inPar["IPAddress"] = ip; inPar["SubnetMask"] = submask; outPar = mo.InvokeMethod("EnableStatic", inPar, null); str = outPar["returnvalue"].ToString(); return (str=="0"||str=="1")?true:false; //获取操作设置IP的返回值, 可根据返回值去确认IP是否设置成功。 0或1表示成功 // 返回值说明网址: https://msdn.microsoft.com/en-us/library/aa393301(v=vs.85).aspx } if(getway!=null) { inPar = mo.GetMethodParameters("SetGateways"); inPar["DefaultIPGateway"] = getway; outPar = mo.InvokeMethod("SetGateways", inPar, null); str = outPar["returnvalue"].ToString(); return (str == "0" || str == "1") ? true : false; } if (dns != null) { inPar = mo.GetMethodParameters("SetDNSServerSearchOrder"); inPar["DNSServerSearchOrder"] = dns; outPar = mo.InvokeMethod("SetDNSServerSearchOrder", inPar, null); str = outPar["returnvalue"].ToString(); return (str == "0" || str == "1") ? true : false; } } } return false; } }
2 设置IP为自动获取
/// <summary> /// 启用DHCP服务 /// </summary> public void EnableDHCP() { ManagementClass wmi = new ManagementClass("Win32_NetworkAdapterConfiguration"); ManagementObjectCollection moc = wmi.GetInstances(); foreach (ManagementObject mo in moc) { if (!(bool)mo["IPEnabled"]) continue; if (mo["SettingID"].ToString() == this.NetworkInterfaceID) //网卡接口标识是否相等, 相当只设置指定适配器IP地址 { mo.InvokeMethod("SetDNSServerSearchOrder", null); mo.InvokeMethod("EnableDHCP", null); } } }
3. 获取所有适配器
public class NetworkAdapterUtil { /// <summary> /// 获取所有适配器类型,适配器被禁用则不能获取到 /// </summary> /// <returns></returns> public List<NetworkAdapter> GetAllNetworkAdapters() //如果适配器被禁用则不能获取到 { IEnumerable<NetworkInterface> adapters = NetworkInterface.GetAllNetworkInterfaces(); //得到所有适配器 return GetNetworkAdapters(adapters); } /// <summary> /// 根据条件获取IP地址集合, /// </summary> /// <param name="adapters">网络接口地址集合</param> /// <param name="adapterTypes">网络连接状态,如,UP,DOWN等</param> /// <returns></returns> private List<NetworkAdapter> GetNetworkAdapters(IEnumerable<NetworkInterface> adapters, params NetworkInterfaceType[] networkInterfaceTypes) { adapterList = new List<NetworkAdapter>(); foreach (NetworkInterface adapter in adapters) { if (networkInterfaceTypes.Length <=0) //如果没传可选参数,就查询所有 { if (adapter != null) { NetworkAdapter adp = SetNetworkAdapterValue(adapter); adapterList.Add(adp); } else { return null; } } else //过滤查询数据 { foreach (NetworkInterfaceType networkInterfaceType in networkInterfaceTypes) { if (adapter.NetworkInterfaceType.ToString().Equals(networkInterfaceType.ToString())) { adapterList.Add(SetNetworkAdapterValue(adapter)); break; //退出当前循环 } } } } return adapterList; } /// <summary> /// 设置网络适配器信息 /// </summary> /// <param name="adapter"></param> /// <returns></returns> private NetworkAdapter SetNetworkAdapterValue(NetworkInterface adapter) { NetworkAdapter networkAdapter = new NetworkAdapter(); IPInterfaceProperties ips = adapter.GetIPProperties(); networkAdapter.Description = adapter.Name; networkAdapter.NetworkInterfaceType = adapter.NetworkInterfaceType.ToString(); networkAdapter.Speed = adapter.Speed / 1000 / 1000 + "MB"; //速度 networkAdapter.MacAddress = adapter.GetPhysicalAddress(); //物理地址集合 networkAdapter.NetworkInterfaceID = adapter.Id;//网络适配器标识符 networkAdapter.Getwaryes = ips.GatewayAddresses; //网关地址集合 networkAdapter.IPAddresses = ips.UnicastAddresses; //IP地址集合 networkAdapter.DhcpServerAddresses = ips.DhcpServerAddresses;//DHCP地址集合 networkAdapter.IsDhcpEnabled =ips.GetIPv4Properties()==null?false: ips.GetIPv4Properties().IsDhcpEnabled; //是否启用DHCP服务 IPInterfaceProperties adapterProperties = adapter.GetIPProperties();//获取IPInterfaceProperties实例 networkAdapter.DnsAddresses = adapterProperties.DnsAddresses; //获取并显示DNS服务器IP地址信息 集合 return networkAdapter; } } }
4 启用, 禁用适配器代码
/// <summary> /// 启用所有适配器 /// </summary> /// <returns></returns> public void EnableAllAdapters() { // ManagementClass wmi = new ManagementClass("Win32_NetworkAdapter"); // ManagementObjectCollection moc = wmi.GetInstances(); System.Management.ManagementObjectSearcher moc = new System.Management.ManagementObjectSearcher("Select * from Win32_NetworkAdapter where NetEnabled!=null "); foreach (System.Management.ManagementObject mo in moc.Get()) { //if (!(bool)mo["NetEnabled"]) // continue; string capation = mo["Caption"].ToString(); string descrption =mo["Description"].ToString(); mo.InvokeMethod("Enable",null); } } /// <summary> /// 禁用所有适配器 /// </summary> public void DisableAllAdapters() { // ManagementClass wmi = new ManagementClass("Win32_NetworkAdapter"); // ManagementObjectCollection moc = wmi.GetInstances(); System.Management.ManagementObjectSearcher moc = new System.Management.ManagementObjectSearcher("Select * from Win32_NetworkAdapter where NetEnabled!=null "); foreach (System.Management.ManagementObject mo in moc.Get()) { //if ((bool)mo["NetEnabled"]) // continue; string capation = mo["Caption"].ToString(); string descrption = mo["Description"].ToString(); mo.InvokeMethod("Disable", null); } }
以上所述就是本文的全部内容了,希望大家能够喜欢。
相关文章
- 我们在使用C#做项目的时候,基本上都需要制作登录界面,那么今天我们就来一步步看看,如果简单的实现登录界面呢,本文给出2个例子,由简入难,希望大家能够喜欢。...2020-06-25
- 这篇文章主要介绍了C# 字段和属性的的相关资料,文中示例代码非常详细,供大家参考和学习,感兴趣的朋友可以了解下...2020-11-03
- 这篇文章主要介绍了C#中截取字符串的的基本方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-11-03
- 本文给大家分享C#连接SQL数据库和查询数据功能的操作技巧,本文通过图文并茂的形式给大家介绍的非常详细,需要的朋友参考下吧...2021-05-17
- 这篇文章主要介绍了C#实现简单的Http请求的方法,以实例形式较为详细的分析了C#实现Http请求的具体方法,需要的朋友可以参考下...2020-06-25
- 本文主要介绍了C#中new的几种用法,具有很好的参考价值,下面跟着小编一起来看下吧...2020-06-25
使用Visual Studio2019创建C#项目(窗体应用程序、控制台应用程序、Web应用程序)
这篇文章主要介绍了使用Visual Studio2019创建C#项目(窗体应用程序、控制台应用程序、Web应用程序),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2020-06-25- 这篇文章主要介绍了C#开发Windows窗体应用程序的简单操作步骤,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-04-12
- 这篇文章主要介绍了C#从数据库读取图片并保存的方法,帮助大家更好的理解和使用c#,感兴趣的朋友可以了解下...2021-01-16
- 最近做一个小项目不可避免的需要前端脚本与后台进行交互。由于是在asp.net中实现,故问题演化成asp.net中jiavascript与后台c#如何进行交互。...2020-06-25
- 这篇文章主要用实例讲解C#递归算法的概念以及用法,文中代码非常详细,帮助大家更好的参考和学习,感兴趣的朋友可以了解下...2020-06-25
- 本文通过例子,讲述了C++调用C#的DLL程序的方法,作出了以下总结,下面就让我们一起来学习吧。...2020-06-25
- 轻松学习C#的基础入门,了解C#最基本的知识点,C#是一种简洁的,类型安全的一种完全面向对象的开发语言,是Microsoft专门基于.NET Framework平台开发的而量身定做的高级程序设计语言,需要的朋友可以参考下...2020-06-25
- 本文主要介绍了C#变量命名规则小结,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-09-09
- 这篇文章主要介绍了c#中(&&,||)与(&,|)的区别详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-06-25
- 这篇文章主要介绍了C#绘制曲线图的方法,以完整实例形式较为详细的分析了C#进行曲线绘制的具体步骤与相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下...2020-06-25
- 本文主要介绍了C# 中取绝对值的函数。具有很好的参考价值。下面跟着小编一起来看下吧...2020-06-25
- 这篇文章主要介绍了c#自带缓存使用方法,包括获取数据缓存、设置数据缓存、移除指定数据缓存等方法,需要的朋友可以参考下...2020-06-25
- 下面小编就为大家带来一篇C#学习笔记- 随机函数Random()的用法详解。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2020-06-25
- 这篇文章主要介绍了C#中list用法,结合实例形式分析了C#中list排序、运算、转换等常见操作技巧,具有一定参考借鉴价值,需要的朋友可以参考下...2020-06-25