以下功能已全面整合在 TSAdapter 类 – 通过 C#获取/设置名称、状态、IP、DNS、网关、接口等信息,本文不再更新!
废话不多说,先引用需要用到的类
using System.Management; using System.Net.NetworkInformation; using System.Net;
大多数来这儿的人是想找获取接口的方法的吧。。。直接贴在这里了:
NetworkInterface[] adapters = NetworkInterface.GetAllNetworkInterfaces(); foreach (NetworkInterface adapter in adapters) { //。。。 IPInterfaceProperties adapterProperties = adapter.GetIPProperties(); IPv4InterfaceProperties p = adapterProperties.GetIPv4Properties(); if (p != null) { 某变量 = p.Index; } //。。。 }
为了方便储存,定义了一个类
public class TSAdapter
{
/// <summary>
/// 适配器的名称
/// </summary>
public string Name;
/// <summary>
/// 适配器的描述
/// </summary>
public string Description;
/// <summary>
/// 适配器的服务名
/// </summary>
public string ServiceName;
/// <summary>
/// 适配器的状态
/// </summary>
public OperationalStatus Status;
/// <summary>
/// 适配器的类型
/// </summary>
public NetworkInterfaceType Type;
/// <summary>
/// 适配器的 DNS 服务器
/// </summary>
public List<string> DNS = new List<string>();
/// <summary>
/// 适配器的接口
/// </summary>
public UInt32? Interface;
/// <summary>
/// 适配器的网关
/// </summary>
public string Gateway;
/// <summary>
/// 重写的基类 ToString 方法
/// </summary>
/// <returns> 适配器的名称</returns>
public override string ToString()
{
return this.Name;
}
}
下面是主要代码
/// <summary>
/// 获取所有适配器的状态、属性
/// </summary>
/// <returns> 每个适配器的泛型</returns>
public static List<TSAdapter> GetAdapters()
{
List<TSAdapter> back = new List<TSAdapter>();
NetworkInterface[] adapters = NetworkInterface.GetAllNetworkInterfaces();
ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM Win32_NetworkAdapter");
ManagementObjectCollection wmiadps = searcher.Get();
foreach (NetworkInterface adapter in adapters)
{
TSAdapter adp = new TSAdapter();
adp.Name = adapter.Name;
adp.Description = adapter.Description;
adp.Status = adapter.OperationalStatus;
adp.Type = adapter.NetworkInterfaceType;
IPInterfaceProperties adapterProperties = adapter.GetIPProperties();
//网关
GatewayIPAddressInformationCollection addresses = adapterProperties.GatewayAddresses;
if (addresses.Count > 0)
{
adp.Gateway = addresses[0].Address.ToString();
}
//DNS
IPAddressCollection dnsServers = adapterProperties.DnsAddresses;
if (dnsServers.Count > 0)
{
foreach (IPAddress dns in dnsServers)
{
adp.DNS.Add(dns.ToString());
}
}
//WMI 中的数据
foreach (ManagementObject mo in wmiadps)
{
if ((string)mo.GetPropertyValue("NetConnectionID") == adp.Name)
{
//接口 (XP 没有该属性!)
try
{
adp.Interface = (UInt32)mo.GetPropertyValue("InterfaceIndex");
}
catch
{
adp.Interface = null;
}
//服务名称
adp.ServiceName = (string)mo.GetPropertyValue("ServiceName");
}
}
back.Add(adp);
}
return back;
}
这里有一个接口是干嘛用的捏?这是用来设置路由的,TS-NLB 中将会用到~
至于 IP,现在路由器这么普及,系统能识别到的都是 DHCP 指派的。可行的方法就是用那些上那个网站能显示 IP 的,把返回的网页拿来分析即可。以后有空来写一下。
还有的是,这个类将有重大更新,支持 set,敬请期待吧。
给一段测试的吧:
/// <summary>
/// 获取所有适配器的报告
/// </summary>
/// <returns> 带有换行符的所有适配器的报告</returns>
public static string GetAdaptersReport()
{
List<TSAdapter> adps = GetAdapters();
string back = "";
foreach (TSAdapter adp in adps)
{
back += "==================================================\r\n";
back += "名称:" + adp.Name + "\r\n";
back += "描述:" + adp.Description + "\r\n";
back += "类型:" + adp.Type.ToString() + "\r\n";
back += "状态:" + adp.Status.ToString() + "\r\n";
back += "网关:" + adp.Gateway + "\r\n";
foreach (string d in adp.DNS)
{
back += "DNS:" + d + "\r\n";
}
back += "接口:" + adp.Interface + "\r\n";
back += "服务名:" + adp.ServiceName + "\r\n";
}
return back;
}
Comments | NOTHING