应该有这种api
http://www.vckbase.com/bbs/prime/viewprime.asp?id=423
http://blog.joycode.com/liuhuimiao/archive/2003/12/23/9754.aspx

解决方案 »

  1.   

    摘录自 “Sybase:C# Network Programming"补充两种办法:1 Using Registry. 2 Using WMI
     1 Using Registry
    Microsoft.Win32.Registry--包含注册表的基础键值名称:Current_User, Local_Machine, Classes_Root, Current_Config, Dyn_Data, and Users.你必须使用其中之一。
    Microsoft.Win32.RegistryKey--包含操作(查询,修改注册表键值或者数据)的Class和Method。CardGrab.cs program 
    -------------------------------
    using System;
    using Microsoft.Win32;
    class CardGrab
    {
      public static void Main ()
      {
      RegistryKey start = Registry.LocalMachine; 
      //你必须定义一个Root Key。  RegistryKey cardServiceName, networkKey;
      string networkcardKey = "SOFTWARE\\Microsoft\\ ?  
          Windows NT\\CurrentVersion\\NetworkCards";
      string serviceKey =
          "SYSTEM\\CurrentControlSet\\Services\\";
     //打开子键。  string networkcardKeyName, deviceName;
      string deviceServiceName, serviceName;
      RegistryKey serviceNames =
                start.OpenSubKey(networkcardKey);
      if (serviceNames == null)
      {
        Console.WriteLine("Bad registry key");
        return;
      }
      string[] networkCards = serviceNames.GetSubKeyNames();
    //GetSubKeyNames() 方法  serviceNames.Close();
      foreach(string keyName in networkCards)
      {
        networkcardKeyName = networkcardKey + "\\" + keyName;
        cardServiceName = start.OpenSubKey(networkcardKeyName);
        if (cardServiceName == null)
        {
         Console.WriteLine("Bad registry key: {0}",
             networkcardKeyName);
         return;
        }
        deviceServiceName =
           (string)cardServiceName.GetValue("ServiceName");
              deviceName =
               (string)cardServiceName.GetValue("Description");
        Console.WriteLine("\nNetwork card: {0}", deviceName);
         
        serviceName = serviceKey + deviceServiceName +
          "\\Parameters\\Tcpip";
        networkKey = start.OpenSubKey(serviceName);
        if (networkKey == null)
        {
         Console.WriteLine("  No IP configuration set");
        } else
        {
          string[] ipaddresses =
            (string[])networkKey.GetValue("IPAddress");
          string[] defaultGateways =
            (string[])networkKey.GetValue("DefaultGateway");
          string[] subnetmasks =
            (string[])networkKey.GetValue("SubnetMask");
          foreach(string ipaddress in ipaddresses)
          {
            Console.WriteLine("  IP Address: {0}",ipaddress);
          }
          foreach(string subnetmask in subnetmasks)
          {
            Console.WriteLine("  Subnet Mask: {0}",
             subnetmask);
          }
          foreach(string defaultGateway in defaultGateways)
          {
            Console.WriteLine("  Gateway: {0}",
                  defaultGateway);
          }
          networkKey.Close();
        }
      }
      start.Close();
      }
    }
    -------------------------------------
    输出结果:
    C:\>CardGrab
    Network card: D-Link DE660 PCMCIA LAN adapter
      IP Address: 192.168.1.6
      Subnet Mask: 255.255.255.0
      Gateway: 192.168.1.1
    C:\>
    --------------------------------------
      

  2.   

    2.Using WMI
    Win32 NetworkAdapterConfiguration Data Fields:DefaultIPGateway 
     An array of IP router addresses assigned to the device
     
    Description 
     The description of the network device
     
    DHCPEnabled 
     Whether the device dynamically assigns its IP address
     
    DHCPServer 
     The DHCP server used to assign an IP address
     
    DNSHostName 
     The DNS host that is used for resolving hostnames
     
    IPAddress 
     An array of IP addresses assigned to the device
     
    IPEnabled 
     Whether the device uses IP on the network
     
    IPSubnet 
     An array of IP subnet addresses used on the device
     
    MACAddress 
     The Ethernet MAC address assigned to the network device
    --------------------------------------------------------------------
    1 Create a ManagementObjectSearcher object that contains a SQL Select statement for the database table.
      创建包含SQL查询语句的ManagementObjectSearcher object。 2 Create a ManagementObjectCollection object to obtain the result set from executing the SQL query.
      创建ManagementObjectCollection object用来获得SQL执行后返回的结果。3 In a foreach loop, assign a new ManagementObject for each object in the Management-ObjectCollection.
      创建foreach循环,为每个ManagementObjectCollection中的ManagementObject赋值。4 Assign the desired data fields to regular type variables.
    -------------------------------------------
     WMICardGrab.cs program using System;
    using System.Management;
    class WMICardGrab
    {
      public static void Main ()
      {
        ManagementObjectSearcher query = new
        ManagementObjectSearcher("SELECT * FROM Â
         Win32_NetworkAdapterConfiguration WHERE IPEnabled = 'TRUE'");
        ManagementObjectCollection queryCollection = query.Get();
        foreach( ManagementObject mo in queryCollection )
        {
          string[] addresses = (string[])mo["IPAddress"];
          string[] subnets = (string[])mo["IPSubnet"];
          string[] defaultgateways =
               (string[])mo["DefaultIPGateway"];
          Console.WriteLine("Network Card: {0}",
                 mo["Description"]);
          Console.WriteLine("  MAC Address: {0}",
                 mo["MACAddress"]);
          foreach(string ipaddress in addresses)
          {
            Console.WriteLine("  IP Address: {0}",
                 ipaddress);
          }
          foreach(string subnet in subnets)
          {
            Console.WriteLine("  Subnet Mask: {0}", subnet);
          }
          foreach(string defaultgateway in defaultgateways)
          {
            Console.WriteLine("  Gateway: {0}",
                 defaultgateway);
          }
        }
      }
    }
    -------------------------------------------
    输出结果:
    C:\>WMICardGrab
    Network Card: D-Link DE660 PCMCIA LAN adapter
      MAC Address: 00:80:C8:BC:CE:C3
      IP Address: 192.168.1.6
      Subnet Mask: 255.255.255.0
      Gateway: 192.168.1.1
    C:\>
    --------------------------------------------
    Using WMi可以获得更多的内容!
      

  3.   

    根据主机名获取与主机关联的 IP 地址列表:
    Dns.Resolve(Dns.GetHostName()).AddressList;