博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

获得Windows系统的IP网络信息的方法

Posted on 2005-02-13 23:43  Arbean.Wu  阅读(1837)  评论(2编辑  收藏  举报

1.  ManagementObjectSearcher类查询WMI数据库

此类在.NET System.Management命名空间。WMIWindows 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地址

代码示例:

private void button1_Click(object sender, System.EventArgs e)

              
{

                     
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类提供得到网络信息的方法。

代码示例:


        private void button1_Click(object sender, System.EventArgs e)
        
{
            
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()));
            }

}