学习c++一点一滴----读取网络适配器信息

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

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;

 

 

直接付源码:

 

ContractedBlock.gif ExpandedBlockStart.gif 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;
}

 

转载于:https://www.cnblogs.com/baiye/archive/2009/07/10/1520393.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值