Windows上获得IP地址的四种方法

转载 2006年06月01日 19:45:00
最近在看网络编程(主要是TCP/IP通信的)的内容,还研究了下WMI。把获得IP地址的方法总结如下。
1.      使用ipconfig程序。
在命令行下使用命令ipconfig可以得到本机的每个有效网罗接口的IP网絡信息。如果在代码中,可以使用Process.Start()方法来调用ipconfig,然后使用正则表达式来解析结果──当然这样做太繁了,不实用。但我曾经使用类似的方法在代码中获得MAC地址
2.      查找注册表。
使用注册表的麻烦之处在于各个版本的Windows在不同的地方存放网絡信息。
Windows98&Windows Me
注册表中的位置为:
          HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/Class/NetTrans
在这下面,每个Key对应一个网络设备的信息(IPAddress,DefaultGateway,IPMask)。
   Windows NTWindows 2000&Windows XP
  和Windows98,Me不同,先要得知有哪些网卡,然后再查此网卡的网絡信息。第一步:找到网卡,地址为:
HKEY_LOCAL_MACHINE/Software/Microsoft/Windows NT/CurrentVersion/NetworkCards,从中得到ServiceName值;
第二步:根据上面得到的ServiceName值到下面地址查找:
HKEY_LOCAL_MACHINE/CurrentControlSet/Services,找到响应的Key后,在parameters/tcpip下可以得到网络设备的信息(IPAddress,DefaultGateway,IPMask)。另外,对于动态的IP地址,可能得去查找DHCPIPAddress注册表對應关键词的值。
3.      使用WMI。
查询表Win32_NetworkAdapterConfiguration即可获得。
4.      使用DNS。
 
代码如下:
using System;
using Microsoft.Win32;
using System.Management;
using System.Net;
namespace IPAddress
{
    
class MainClass
    
{
        
/// <summary>
        
/// 應用程式的主進入點。
        
/// </summary>

        [STAThread]
        
static void Main(string[] args)
        
{
            GetIPByRegistry();
            GetIPByWMI();
            GetIPByDns();
            Console.ReadLine();
        }


        
#region Methods
        
private const string CARDKEY = @"SOFTWARE/Microsoft/Windows NT/CurrentVersion/NetworkCards";
        
private const string SERVICEKEY = @"SYSTEM/CurrentControlSet/Services/";
        
public static void GetIPByRegistry()
        
{
            RegistryKey entry 
= Registry.LocalMachine;
            RegistryKey services 
= entry.OpenSubKey(CARDKEY);
            
if ( services == null)
                
return;

            
string[] cards = services.GetSubKeyNames();
            services.Close();

            
foreach (string key in cards )
            
{
                RegistryKey cardService 
= entry.OpenSubKey(CARDKEY + "//" +key);
                
if ( cardService == null )
                    
return;
                
string serviceName = cardService.GetValue("ServiceName").ToString();
                Console.WriteLine(
"/n Network card : {0}",serviceName);
                
                RegistryKey networkCard 
= entry.OpenSubKey(SERVICEKEY+serviceName+"//Parameters//Tcpip");
                
if ( networkCard != null )
                
{
                    
string[] ips = (string[]) networkCard.GetValue("IPAddress");
                    
foreach ( string ip in ips)
                    
{
                        Console.WriteLine(
" The IPAddress is  :{0}",ip);
                    }

                    networkCard.Close();
                }

                entry.Close();
            }

        }


        
public static void GetIPByWMI()
        
{
            
string query = "select IPAddress from Win32_NetworkAdapterConfiguration where IPEnabled='TRUE'";
            ManagementObjectSearcher searcher 
= new ManagementObjectSearcher(query);
            ManagementObjectCollection collection 
= searcher.Get();
            
foreach ( ManagementObject mo in collection )
            
{
                
string[] ips = (string[])mo["IPAddress"];
                
foreach ( string ip in ips )
                
{
                    Console.WriteLine(
" Network card ip is :{0}",ip);
                }

            }

        }


        
public static void GetIPByDns()
        
{
            System.Net.IPAddress[] ips 
= Dns.GetHostByName(Dns.GetHostName()).AddressList;
            
foreach ( System.Net.IPAddress ip in ips )
            
{
                Console.WriteLine(
"The ip is : {0}",ip.ToString());
            }

        }

        
#endregion

    }

}

Win32获取主机名和IP地址

Win32获取计算机名称和IP地址列表的示例代码。
  • u013344915
  • u013344915
  • 2016年05月23日 10:47
  • 970

用getHostAddress方法获得IP地址

这个方法用来得到主机的IP地址,这个IP地址可能是IPv4的地址,也可能是IPv6的地址。getHostAddress方法的定义如下: public String getHostAd...
  • u011625768
  • u011625768
  • 2015年01月27日 14:38
  • 426

不重起Windows 直接更改IP 地址的三种方法

有很多网友都遇到过更改IP 地址但是要重启机器的问题,在这里,为大家介绍几种不重启Windows 直接更改 IP 地址的方法。首先是调用DhcpNotifyConfigChange 的方法,后面还有...
  • JiXuXiangQianZou
  • JiXuXiangQianZou
  • 2013年06月10日 19:39
  • 1835

Windows 7 下IP和MAC地址的绑定

Windows 7 下IP和MAC地址的绑定    最近要和机房AIX主机进行远程(telnet)连接,但经常出现客户端ip和机房主机ip冲突,因此在client(windows 7)下执行ip(AI...
  • lqx0405
  • lqx0405
  • 2015年03月31日 12:08
  • 910

php获取用户(客户端)真实IP地址的三种方法

php获取用户(客户端)真实IP地址的三种方法 第一种方法,还算靠谱,本人以前一直用的是这个方法: 查看代码 打印 01 function...
  • centaury32
  • centaury32
  • 2016年10月13日 11:17
  • 3490

如何获取域名(网址)对应的IP地址

域名(Domain Name),是由一串用点分隔的名字组成的Internet上某一台计算机或计算机组的名称,用于在数据传输时标识计算机的电子方位。通俗点讲,域名就是我们平时进行网络浏览时所用到的网址(...
  • u010542873
  • u010542873
  • 2016年04月07日 15:42
  • 8585

指定IP地址进行远程访问设置方法windows

一、新建IP安全策略 WIN+R打开运行对话框,输入gpedit.msc进入组策略编辑器。 依次打开“本地计算机”策略–计算机配置–Windows设置–安全设置–IP安全策略,在 本地计算机上。 ...
  • z_johnny
  • z_johnny
  • 2016年05月24日 15:39
  • 4657

php获取客户端IP地址的几种方法(转)

php获取客户端IP地址的几种方法
  • u011233702
  • u011233702
  • 2014年06月19日 18:17
  • 8965

JAVA程序 通过IP地址 获取MAC地址

我们都知道通过在电脑上敲 cmd 后,输入ipconfig -all 来获取IP地址或者MAC地址,java程序可以在window和linux下获取MAC地址等信息!看下面代码 import jav...
  • chwshuang
  • chwshuang
  • 2015年07月19日 21:52
  • 4034

获取本地机器名字与IP地址(使用套接字)

使用套接字获取本地机器的主机名字与IP地址: #include #include #pragma comment(lib, "ws2_32.lib") bool get_inside_ip(st...
  • hellokandy
  • hellokandy
  • 2016年08月12日 13:22
  • 1082
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Windows上获得IP地址的四种方法
举报原因:
原因补充:

(最多只允许输入30个字)