读取网络适配器信息

昨天搞 了一天的注册表,今天把读取网卡信息搞定了,相比之下,速度要比昨天快的多。孰能生巧,大家多多联系啊 !~不废话,直接上。

PIP_ADAPTER_INFO   结构   存储网络适配器信息

typedef struct _IP_ADAPTER_INFO {
  struct _IP_ADAPTER_INFO* Next;
  DWORD ComboIndex;
  char AdapterName[MAX_ADAPTER_NAME_LENGTH + 4];
  char Description[MAX_ADAPTER_DESCRIPTION_LENGTH + 4];
  UINT AddressLength;
  BYTE Address[MAX_ADAPTER_ADDRESS_LENGTH];
  DWORD Index;
  UINT Type;
  UINT DhcpEnabled;
  PIP_ADDR_STRING CurrentIpAddress;
  IP_ADDR_STRING IpAddressList;
  IP_ADDR_STRING GatewayList;
  IP_ADDR_STRING DhcpServer;
  BOOL HaveWins;
  IP_ADDR_STRING PrimaryWinsServer;
  IP_ADDR_STRING SecondaryWinsServer;
  time_t LeaseObtained;
  time_t LeaseExpires;
} IP_ADAPTER_INFO,
*PIP_ADAPTER_INFO;

GetAdaptersInfo        函数   获取所有的适配器信息

DWORD GetAdaptersInfo(
  PIP_ADAPTER_INFO pAdapterInfo,
  PULONG pOutBufLen
);

 

IP_ADDR_STRING  结构 IP列表

typedef struct _IP_ADDR_STRING {
  struct _IP_ADDR_STRING* Next;
  IP_ADDRESS_STRING IpAddress;
  IP_MASK_STRING IpMask;
  DWORD Context;
} IP_ADDR_STRING, *PIP_ADDR_STRING;

 

 

直接付源码:

 

Code
// network.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <iostream>
#include <windows.h>
#include <iptypes.h>
#include <winnt.h>
#include <iphlpapi.h>
#pragma comment(lib,"iphlpapi")
using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
    PIP_ADAPTER_INFO pAdapter=NULL;    //初始化两个结构
    PIP_ADAPTER_INFO pAdapterInfo;
    DWORD dwRes=0;    //获取适配器信息返回状态
    DWORD dwOutBuff=sizeof(IP_ADAPTER_INFO);    //为PIP_ADAPTER_INFO动态分配内存设置大小
    pAdapterInfo=(IP_ADAPTER_INFO *)new (char[dwOutBuff]);    //动态分配内存。
    if(GetAdaptersInfo(pAdapterInfo,&dwOutBuff)==ERROR_BUFFER_OVERFLOW)    //判断获取信息初始化适配器结构是否出现错误,
    {
        delete pAdapterInfo;    //删除动态内存
        pAdapterInfo=(IP_ADAPTER_INFO *)new (char[dwOutBuff]);    //从新分配内存
    }
    dwRes=GetAdaptersInfo(pAdapterInfo,&dwOutBuff);        //获取是适配器信息,填充PIP_ADAPTER_INFO结构
    if(dwRes==NO_ERROR)
    {
        pAdapter=pAdapterInfo;    
        while(pAdapter)
        {
            WCHAR MAC[20]={0};    //存储网卡mac
            swprintf(MAC,L"%.2X-%.2X-%.2X-%.2X-%.2X-%.2X",    //格式化填充mac
                pAdapter->Address[0],
                pAdapter->Address[1],
                pAdapter->Address[2],
                pAdapter->Address[3],
                pAdapter->Address[4],
                pAdapter->Address[5]);
            wcout<<MAC<<endl;
            IP_ADDR_STRING *pIpAddr;    //创建ip列表指针
            pIpAddr=&(pAdapter->IpAddressList);    //指针指向ip列表
            WCHAR IP[260]={0};
            WCHAR m_addr[200]={0};
            if(pIpAddr)    //如果指针不指向NULL
            {
                mbstowcs(m_addr,pIpAddr->IpAddress.String,sizeof pIpAddr->IpAddress.String);    //获取ip地址,然后转换为WCHAR
                wcscat(IP,m_addr);    //连接ip
                pIpAddr=pIpAddr->Next;    //指向下个适配器IP
            }
            
            while(pIpAddr)
            {
                memset(m_addr,0,200);    //重置m_addr为0
                mbstowcs(m_addr,pIpAddr->IpAddress.String,sizeof pIpAddr->IpAddress.String);
                wcscat(IP,L"-");
                wcscat(IP,m_addr);
                pIpAddr=pIpAddr->Next;
            }
            memset(m_addr,0,200);
            wcout<<IP<<endl;
            pAdapter=pAdapter->Next;
        }
    }
    delete pAdapterInfo;
    return 0;
}
ULONG nLen   =0; 
GetAdaptersInfo(NULL,&nLen); 
if(nLen){ 
pAdapterInfo =   reinterpret_cast <PIP_ADAPTER_INFO> (new   BYTE[nLen]); 
GetAdaptersInfo(pAdapterInfo,&nLen); 
PIP_ADAPTER_INFO pAdapter=pAdapterInfo; 
while(pAdapter) 

PIP_ADDR_STRING next =   &pAdapter-> IpAddressList; 
while(next!=NULL) 

... 


}
http://bbs.51cto.com/thread-568740-1.html
http://bbs.xiujie.cn/thread-2942-1-1.html
http://caifuchang.blog.163.com/blog/static/3391233120101225459543/
http://www.vckbase.com/document/viewdoc/?id=435

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值