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

转载 2006年05月26日 14:47: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

    }

}

window上获取本机IP地址方法--windows编程

使用获取本地地址的方法比较多,简单点的就是ipconfig命令就好了,本地网络之类的图形界面而本次是使用作为一个程序员的方式来获取本地的ip地址。 InitSock.h如下: #include ...
  • u011046042
  • u011046042
  • 2016-12-17 10:33:10
  • 3836

windows下获取MAC地址的三种方法

1、发送ARP包获取MAC地址: #include #include #include "Iphlpapi.h" #pragma comment(lib, "IpHlpApi.lib") #p...
  • xuezhimeng
  • xuezhimeng
  • 2011-09-21 16:23:35
  • 3378

通过DeviceIoControl获取真实网卡地址

我们可以通过DeviceIoControl接口与内核驱动通信来获取真实网卡以及当前网卡的地址。 首先包含头文件 #include // 网卡标识,xp下可以在注册表下对应位置找到,本例: //...
  • qing666888
  • qing666888
  • 2017-10-05 01:46:31
  • 184

windows网络编程-几种模式

 堵塞模式 1、tcp服务端 socket初始化:socket bind ip地址,端口信息 listen 启用监听 accept:等待连接 send,recv数据 2、tcp客户...
  • hjing1988
  • hjing1988
  • 2016-10-10 09:16:31
  • 1553

Windows网络编程第二版 中文版随书源代码

  • 2008年03月04日 21:34
  • 1.62MB
  • 下载

windows网络编程源代码(第2版)

  • 2009年10月31日 16:22
  • 1.28MB
  • 下载

Windows网络编程附书代码(简单的服务器与客户端)

//程序清单6-1 回应服务器代码 // 编译命令Compile:cl -o Server Server.c ws2_32.lib // // 命令行选项: // server [-p:x] ...
  • gzzheyi
  • gzzheyi
  • 2012-01-29 16:06:14
  • 3743

windows下用c++获取本机ip地址

windows下用c++获取本机ip地址工作过程中遇到一个需求,需要获取本机ip地址,同时获取本机网络连接情况,即网线是否连接。经过多番搜索,有如下3种方案。1、管道+多进程思路:在一个cmd中执行i...
  • junbujianwpl
  • junbujianwpl
  • 2017-11-09 23:03:24
  • 613

JavaScript打开窗口函数(Window.Open)使用详解、绝对路径与相对路径的获取与转换

JavaScript打开窗口函数(Window.Open)使用详解   一、Location对象的使用简介 location对象: location提供了关于当前打开窗口或者特定框架的url信...
  • ye1992
  • ye1992
  • 2013-08-08 14:47:48
  • 10879

快速获取别人IP地址的4种方法

那么对方的IP地址该如何搜查得到呢?这样的问题你也许会嗤之以鼻,的确,查询对方计算机的IP地址,实在简单得不值得一提;可是,要让你列举出多种IP地址搜查方法时,你可能就感到勉为其难了。下面,本文就对如...
  • qq78069460
  • qq78069460
  • 2016-07-05 15:41:25
  • 18021
收藏助手
不良信息举报
您举报文章:Windows上获得IP地址的四种方法
举报原因:
原因补充:

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