1. 用ManagementObjectSearcher类查询WMI数据库
此类在.NET System.Management命名空间。WMI(Windows Management Instrumentation 视窗系统管理方法),是微软Web-Based Enterprise Management的实现,它是网络环境中访问系统信息的一个标准。从Windows 2000开始,微软就把含有系统软件、硬件信息和当前硬件状态的数据库包含在操作系统中了。C#语言可以直接查询该数据库,以判断管理软、硬件组件(包括网络设备)的状态。WMI数据库的Win32_NetWorkAdapterConfiguration表中包含了关于系统安装的网络设备的信息。表中字段如下:
字段 说明
DefaultPGateWay 分配给设备的IP路由器地址数组
Description 对网络设备的说明
DHCPEnabled 是否该设备动态地分配它的IP地址
DHCPServer 服务器使用的DHCP,用来分配一个IP地址
DNSHostName 为分解主机名而使用的DNS主机
IPAddress 分配到设置的IP地址数组
IPEnable 是否该设备在网络上使用IP
IPSubnet 设备上使用的IP子网地址数组
MACAddress 分配到网络设备的以太网MAC地址
代码示例:
{
string sql = "SELECT * FROM Win32_NetWorkAdapterConfiguration WHERE IPEnabled = 'TRUE' ";
ManagementObjectSearcher query = new ManagementObjectSearcher(sql);
ManagementObjectCollection queryCollection = query.Get();
foreach(ManagementObject mo in queryCollection)
{
string[] addresses = (string[])mo["IPAddress"];
string[] subnets = (string[])mo["IPSubnet"];
string[] defaultgateways = (string[])mo["DefaultIPGateway"];
this.listBox1.Items.Add(string.Format("Network Card: {0}",mo["Description"]));
this.listBox1.Items.Add(string.Format(" MAC Address: {0}",mo["MACAddress"]));
foreach(string ipaddress in addresses)
{
this.listBox1.Items.Add(string.Format(" IP Address: {0}",ipaddress));
}
foreach(string subnet in subnets)
{
this.listBox1.Items.Add(string.Format(" Subnet Mask: {0}",subnet));
}
foreach(string defaultgateway in defaultgateways)
{
this.listBox1.Items.Add(string.Format(" Gateway: {0}",defaultgateway));
}
}
2. 使用DNS
.NET System.Net命名空间中的Dns类提供得到网络信息的方法。
代码示例:
{
string hostName = Dns.GetHostName();
this.listBox1.Items.Add(string.Format("Local hostname: {0}",hostName));
IPHostEntry myself = Dns.GetHostByName(hostName);
foreach(IPAddress address in myself.AddressList)
{
this.listBox1.Items.Add(string.Format("IP Address: {0}",address.ToString()));
}
}