使用WMI控制网络适配器的类(获取所有启用的网络适配器及其信息。设置IP、子网掩码,网关,DNS)
using System;
using System.Collections.Generic;
using System.Text;
using System.Management;
namespace SetupNetwork
{
/// <summary>
/// 表示一个IP地址,包括IP和子网掩码
/// </summary>
class IP
{
string ip, submask;
public IP(string ip, string submask)
{
this.ip = ip;
this.submask = submask;
}
public string IPAddress
{
get
{
return ip;
}
set { ip = value; }
}
public string Submask
{
get { return submask; }
set { submask = value; }
}
}
/// <summary>
/// 表示一个网关,包括风网关和跳
/// </summary>
class Gateway
{
string ip;
UInt16 heap;
//private new Gateway() { }
public Gateway(string ip, UInt16 heap)
{
this.ip = ip;
this.heap = heap;
}
public string IP
{
get { return ip; }
set { ip = value; }
}
public UInt16 Heap
{
get { return heap; }
set { heap = value; }
}
}
class NetworkInfomation
{
string m_Name;//Network Adpter's name
IP[] ip;
Gateway[] gateway;
string[] m_dns;
string m_MAC;
ManagementObject mo;
/// <summary>
///
/// </summary>
/// <param name="AdpterIndex">网络适配器的序号零基</param>
public NetworkInfomation(int AdpterIndex)
{
ManagementObjectSearcher mc = new ManagementObjectSearcher("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = 'TRUE'");
ManagementObjectCollection moc = mc.Get();
int idx = 0;
foreach (ManagementObject mo in moc)
{
if (idx++ == AdpterIndex)
{
if ((bool)mo["IPEnabled"])
{
this.mo = mo;
m_Name = (string)mo["Description"];
m_MAC = (string)mo["MacAddress"];
// 取得本机IP地址,并显示
string[] addresses = (string[])mo["IPAddress"];
// 取得本机子网掩码,并显示
string[] subnets = (string[])mo["IPSubnet"];
ip = new IP[addresses.Length];
for (int i = 0; i < addresses.Length; i++)
{
ip[i] = new IP(addresses[i], subnets[i]);
//ip[i].IPAddress = ;
//ip[i].Submask = s;
}
// 检测IP冲突
if (ip.Length == 1 && ip[0].IPAddress == "0.0.0.0")
{
throw new Exception("IP冲突");
}
// 取得网关,并显示
string[] gateways = (string[])mo["DefaultIPGateway"];
System.UInt16[] costMetric = (System.UInt16[])mo["GatewayCostMetric"];
gateway = new Gateway[gateways.Length];
for (int i = 0; i < gateways.Length; i++)
{
gateway[i] = new Gateway(gateways[i], costMetric[i]);
//gateway[i].IP = ;
//gateway[i].Heap = ;
}
// 取得DNS服务器地址,并显示
m_dns = (string[])mo["DNSServerSearchOrder"];
break;
}
}
}
}
/// <summary>
/// 获取网络适配器的MAC
/// </summary>
public string MAC
{
get { return m_MAC; }
}
/// <summary>
/// 获取所有启用的网络适配器的名称
/// </summary>
/// <returns></returns>
public static string[] GetNetworkAdpters()
{
ManagementObjectSearcher mc = new ManagementObjectSearcher("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = 'TRUE'");
ManagementObjectCollection moc;
moc = mc.Get();
string[] s = new string[moc.Count];
int i = 0;
foreach (ManagementObject mo in moc)
{
s[i++] = mo["Description"].ToString();
}
return s;
}
/// <summary>
/// 网络适配器名称
/// </summary>
public string Name
{
get { return m_Name; }
}
/// <summary>
/// 分配在网络适配器上的IP地址
/// </summary>
public IP[] IP
{
get { return ip; }
}
/// <summary>
/// 分配在网络适配器上的网关
/// </summary>
public Gateway[] Gateway
{
get { return gateway; }
}
/// <summary>
/// 网络适配器上设置的的DNS服务器
/// </summary>
public string[] DNS
{
get { return m_dns; }
}
/// <summary>cortrol</summary>
/// <param name="ipAddr">IPAddr List</param>
/// <param name="subnetMask">subnetMask List</param>
public void ChangeTo(string[] ipAddr, string[] subnetMask)
{
ManagementBaseObject iObj = null;
ManagementBaseObject oObj = null;
iObj = mo.GetMethodParameters("EnableStatic");
iObj["IPAddress"] = ipAddr;
iObj["SubnetMask"] = subnetMask;
oObj = mo.InvokeMethod("EnableStatic", iObj, null);
}
/// <summary>设置网络适配器IP</summary>
/// <param name="ipAddr">IPAddr List</param>
/// <param name="subnetMask">subnetMask List</param>
public void ChangeTo(IP[] ip)
{
string[] sip = new string[ip.Length];
string[] sub = new string[ip.Length];
for (int i = 0; i < ip.Length; i++)
{
sip[i] = ip[i].IPAddress;
sub[i] = ip[i].Submask;
}
ChangeTo(sip, sub);
}
/// <summary>设置网络适配器IP</summary>
/// <param name="ipAddr">IPAddr List</param>
/// <param name="subnetMask">subnetMask List</param>
public static void ChangeTo(string[] ipAddr, string[] subnetMask, int index)
{
ManagementBaseObject iObj = null;
ManagementBaseObject oObj = null;
ManagementObjectSearcher mc = new ManagementObjectSearcher("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = 'TRUE'");
ManagementObjectCollection moc;
moc = mc.Get();
int i = 0;
foreach (ManagementObject mo in moc)
{
if (!(bool)mo["IPEnabled"]) continue;
if (i++ == index)
{
iObj = mo.GetMethodParameters("EnableStatic");
iObj["IPAddress"] = ipAddr;
iObj["SubnetMask"] = subnetMask;
oObj = mo.InvokeMethod("EnableStatic", iObj, null);
break;
}
}
}
/// <summary>设置网络适配器IP</summary>
/// <param name="ipAddr">IPAddr List</param>
/// <param name="subnetMask">subnetMask List</param>
public static void ChangeTo(IP[] ip, int index)
{
string[] sip = new string[ip.Length];
string[] sub = new string[ip.Length];
for (int i = 0; i < ip.Length; i++)
{
sip[i] = ip[i].IPAddress;
sub[i] = ip[i].Submask;
}
NetworkInfomation.ChangeTo(sip, sub, index);
}
}
}