利用IP_ADAPTER_INFO結構獲取網絡適配器信息

IP_ADAPTER_INFO 結構具有很大的信息量,包含了適配的描述,IP,MAC,MaskIp等,該結構是鏈表形式,通過遍歷可實現多所有適配器信息的提取,使用比較簡單。

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;
例子:

/*********************************
* 函數: BOOL GetNetAddress()
* 作用: 獲取IP地址(可以是多個IP地址,包括虛擬機IP)
* 返回:成功返回TRUE,錯誤返回FALSE;
*********************************/
BOOL CGetComputerInfo::GetNetAddress()
{
    
    IP_ADAPTER_INFO * pInfo = NULL ;
    unsigned long ulLength=sizeof (IP_ADAPTER_INFO );
    
    if ( GetAdaptersInfo( pInfo , &ulLength) == ERROR_SUCCESS) 
    {
        return FALSE;
       
    }
    GlobalFree (pInfo );
    pInfo = (IP_ADAPTER_INFO *) malloc (ulLength );
    
    if( GetAdaptersInfo(pInfo ,&ulLength)== NO_ERROR)
    {
        //遍歷多個適配器
        while (pInfo)
        {
            //MAC地址
            IP_ADDR_STRING*  ipList = &(pInfo->IpAddressList);
            int macLen = pInfo->AddressLength;
            BYTE * lpByteMack = pInfo->Address;
            WCHAR lpMack[MAX_PATH]={0};
            StringCchPrintfW(lpMack,MAX_PATH,_T("%02x-%02x-%02x-%02x-%02x-%02x"),
                             lpByteMack[0],lpByteMack[1],lpByteMack[2],
                             lpByteMack[3],lpByteMack[4],lpByteMack[5]);
            XMLitemAdd(_T("MAC address"),lpMack);
            while (ipList)
            {
                //IP地址
                IP_ADDRESS_STRING  ipAdree = ipList->IpAddress;
                LPWSTR lpIPaddress = ANIStoWideChar(ipAdree.String,strlen(ipAdree.String));
                if (lpIPaddress!=NULL)
                {
                    XMLitemAdd(_T("IP Addree"),lpIPaddress);
                }
                delete []lpIPaddress;
                lpIPaddress = NULL;

                //獲取子網
                IP_MASK_STRING ipMask = ipList->IpMask;
                LPWSTR lpIPmask = ANIStoWideChar(ipMask.String,strlen(ipMask.String));
                if (lpIPmask != NULL)
                {
                    XMLitemAdd(_T("IPmask"),lpIPmask);
                }
                delete [] lpIPmask;
                lpIPmask = NULL;

                ipList=ipList->Next;
            } 
           pInfo = pInfo->Next;
        }      
    }
    else
    {
        return FALSE;
    }
    return TRUE;
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章