当前位置:
首页 > Python基础教程 >
-
C#教程之C#实现获取设置IP地址小工具
报表界面
说下关键代码
需要开启 Windows Management Instrumentation服务(默认已经开启),在程序中需要增加 Management引用。
主要有NetworkAdapter(保存适配器的IP地址,网关,子网掩码,设置IP方面等 ),NetworkAdapterUtil(主要是NetworkAdapter类的集合 )两个类。
在windows8 需要在app.manifest文件中
修改配置 <requestedExecutionLevel level="requireAdministrator" uiAccess="false" />,不然就算有管理员权限也修改不了IP地址。
1 设置IP地址的代码。(设置IP地址,修改IP地址需要管理员权限)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
|
/// <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为自动获取
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
/// <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. 获取所有适配器
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
|
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 启用, 禁用适配器代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
/// <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 ); } } |
以上所述就是本文的全部内容了,希望大家能够喜欢。
栏目列表
最新更新
nodejs爬虫
Python正则表达式完全指南
爬取豆瓣Top250图书数据
shp 地图文件批量添加字段
爬虫小试牛刀(爬取学校通知公告)
【python基础】函数-初识函数
【python基础】函数-返回值
HTTP请求:requests模块基础使用必知必会
Python初学者友好丨详解参数传递类型
如何有效管理爬虫流量?
SQL SERVER中递归
2个场景实例讲解GaussDB(DWS)基表统计信息估
常用的 SQL Server 关键字及其含义
动手分析SQL Server中的事务中使用的锁
openGauss内核分析:SQL by pass & 经典执行
一招教你如何高效批量导入与更新数据
天天写SQL,这些神奇的特性你知道吗?
openGauss内核分析:执行计划生成
[IM002]Navicat ODBC驱动器管理器 未发现数据
初入Sql Server 之 存储过程的简单使用
这是目前我见过最好的跨域解决方案!
减少回流与重绘
减少回流与重绘
如何使用KrpanoToolJS在浏览器切图
performance.now() 与 Date.now() 对比
一款纯 JS 实现的轻量化图片编辑器
关于开发 VS Code 插件遇到的 workbench.scm.
前端设计模式——观察者模式
前端设计模式——中介者模式
创建型-原型模式