C#设置IP地址,启用禁用适配器
界面效果图如下:
报表界面
说下关键代码
需要开启 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==""||str=="")?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 == "" || str == "") ? true : false;
- }
- if (dns != null)
- {
- inPar = mo.GetMethodParameters("SetDNSServerSearchOrder");
- inPar["DNSServerSearchOrder"] = dns;
- outPar = mo.InvokeMethod("SetDNSServerSearchOrder", inPar, null);
- str = outPar["returnvalue"].ToString();
- return (str == "" || str == "") ? 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 <=) //如果没传可选参数,就查询所有
- {
- 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 / / + "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);
- }
- }
程序下载地址: http://download.csdn.net/detail/ss641135196/8808159
在写程序中参考网址:
https://msdn.microsoft.com/en-us/library/aa394084(VS.85).aspx WMI管网
http://www.cnblogs.com/chengulv/archive/2012/12/29/2839303.html参考网址
http://blog.sina.com.cn/s/blog_64b9c6850100h6r9.html
C#设置IP地址,启用禁用适配器的更多相关文章
- iptables常用规则:屏蔽IP地址、禁用ping、协议设置、NAT与转发、负载平衡、自定义链
iptables常用规则:屏蔽IP地址.禁用ping.协议设置.NAT与转发.负载平衡.自定义链 时间 -- :: IT社区推荐资讯 原文 http://itindex.net/detail/4772 ...
- Windows下使用命令行设置ip地址的DNS服务器
使用命令行或者编写bat批处理设置网络连接的IP地址以及DNS服务器地址有时候会比手动更加方便,IP地址和DNS的设置一般是配合的,常用到的几个状态是: 1.IP地址动态获取,DNS也动态 2.IP地 ...
- 【转】Centos 设置IP地址的几种方式
对于很多刚刚接触linux的朋友来说,如何设置linux系统的IP地址,作为第一步,下面小编以centos系统为例,给大家演示如何给centos设置IP地址,如何修改linux 系统IP地址? 查看I ...
- Linux CentOS7中 设置IP地址、网关DNS
cd /etc/sysconfig/network-scripts/ #进入网络配置文件目录 vi ifcfg-eno16777736 #编辑配置文件,此处eno后边的编号因电脑而易 TYPE ...
- CentOS/Linux 网卡设置 IP地址配置
CentOS/Linux下设置IP地址 1:临时修改:1.1:修改IP地址# ifconfig eth0 192.168.100.100 1.2:修改网关地址# route add default g ...
- Centos如何设置IP地址,LINUX怎么修改IP地址
对于很多刚刚接触linux的朋友来说,如何设置linux系统的IP地址,作为第一步,下面小编以centos系统为例,给大家演示如何给centos设置IP地址,如何修改linux 系统IP地址? 步骤阅 ...
- Linux网络配置:设置IP地址、网关DNS、主机名
查看网络信息 1.ifconfig eth0 2.ifconfig -a 3.ip add 设置主机名需改配置文件: /etc/hosts /etc/sysconfig/network vim /et ...
- Linux系统下如何设置IP地址?
Linux系统下如何设置IP地址?我们可以通过命令设定IP的方法,不过此方法的前提条件是用户需root权限.在linux系统的 /etc/sysconfig/network-script/ifcfg- ...
- 利用netsh命令设置IP地址/DNS服务器地址
一.设置IP地址 1. 自动获取IP地址: netsh interface ip set address [name=]"本地连接" [source=]dhcp 2. 手动设置IP ...
随机推荐
- STM8S 模拟I2C程序
STM8S的硬件I2C还是存在问题,不敢贸然使用. 于是决定用模拟I2C. #define SCL PE_ODR_ODR1 #define SDA PE_ODR_ODR2 #define SDAM P ...
- List、Set、 数组等转字符串
public class Test { public static void main(String[] args) { String str = ""; // list转字符串 ...
- C参数计算
C‘计算参数时,从右向左压栈的 int a[]={1,3,4}; int * ptr=a; pirntf("%d,%d\n",*ptr,*(++ptr)); 输出都是3:
- P2032 「Poetize9」升降梯上
描述 开启了升降梯的动力之后,探险队员们进入了升降梯运行的那条竖直的隧道,映入眼帘的是一条直通塔顶的轨道.一辆停在轨道底部的电梯.和电梯内一杆控制电梯升降的巨大手柄.Nescafe之塔一共有N层,升降 ...
- Qt入门(18)——使用信号和槽连接控件
下面显示了如何使用信号和槽来创建自定义窗口部件,和如何使用更加复杂的方式把它们连接起来. 首先,源文件被我们分成几部分并放在放在t7目录下. t7/lcdrange.h包含LCDRange类定义.t7 ...
- UVa11248 Frequency Hopping(最大流+最小割)
题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=33206 [思路] 最大流最小割. 可以确定的是如果不可行需要修改的 ...
- python多线程机制
Python中的线程从一开始就是操作系统的原生线程.而Python虚拟机也同样使用一个全局解释器锁(Global Interpreter Lock,GIL)来互斥线程多Python虚拟机的使用. GI ...
- 理解Java NIO
基础概念• 缓冲区操作缓冲区及操作是所有I/O的基础,进程执行I/O操作,归结起来就是向操作系统发出请求,让它要么把缓冲区里的数据排干(写),要么把缓冲区填满(读).如下图• 内核空间.用户空间 上图 ...
- WebSphere应用服务器中https 请求协议的相关注意事项(服务器使用代理上Internet)
最近遇到个需求需要web服务器应用通过https方式请求外部Internet服务器的接口,一开始本地测试时使用以下代码: String businessCode = "SH30580&quo ...
- XPath与Xquery
XPath 和 XQuery 在某些方面很相似.XPath 还是 XQuery 完整不可分割的一部分.这两种语言都能够从 XML 文档或者 XML 文档存储库中选择数据.本文简要介绍了 XPath 和 ...