2012-10-26 5 views
0

안녕하세요 누구든지 C++를 사용하여 사용자 컴퓨터에서 NIC 주소를 얻는 방법을 안내해 드릴 수 있습니까? 나는 이것이 가능하다면 완전히 확실하지 오전 초보자로서 나는, 당신은 phsyical 주소를 검색하려면 GetAdaptersAddresses 기능을 사용할 수 있습니다 창에서NIC 주소 얻기

감사

+0

무엇을 할 계획입니까? –

+0

어떤 운영 체제입니까? (그리고 이미 꽤 많은 시간이 걸렸을 것입니다.) 또한 NIC 주소는 무엇을 의미합니까? 맥? IP? – Mat

+0

어떤 OS를 고려하고 있습니까? –

답변

0

를 시작하는 위치에 너무 확실하지 않다.

std::string ConvertPhysicalAddressToString(BYTE* p_Byte, int iSize) 
{ 
    string strRetValue; 

    char cAux[3]; 
    for(int i=0; i<iSize; i++) 
    { 
     sprintf_s(cAux,"%02X", p_Byte[i]); 
     strRetValue.append(cAux); 
     if(i < (iSize - 1)) 
      strRetValue.append("-"); 
    } 

    return strRetValue; 
} 

void GetEthernetDevices(std::vector<std::string> &vPhysicalAddress) 
{  
    // Call the Function with 0 Buffer to know the size of the buffer required 
    unsigned long ulLen = 0; 
    IP_ADAPTER_ADDRESSES* p_adapAddress = NULL; 
    if(GetAdaptersAddresses(AF_INET, 0, NULL, p_adapAddress,&ulLen) == ERROR_BUFFER_OVERFLOW) 
    { 
     p_adapAddress = (PIP_ADAPTER_ADDRESSES)malloc(ulLen); 
     if(p_adapAddress) 
     { 
      DWORD dwRetValue = GetAdaptersAddresses(AF_INET, 0, NULL, p_adapAddress,&ulLen); 
      if(dwRetValue == NO_ERROR) 
      {    
       IP_ADAPTER_ADDRESSES* p_adapAddressAux = p_adapAddress; 
       do 
       { 
        // Only Ethernet 
        if(p_adapAddressAux->IfType == IF_TYPE_ETHERNET_CSMACD)     
         vPhysicalAddress.push_back(ConvertPhysicalAddressToString(p_adapAddress->PhysicalAddress, p_adapAddress->PhysicalAddressLength)); 

        p_adapAddressAux = p_adapAddressAux->Next; 
       } 
       while(p_adapAddressAux != NULL);       
      } 
      free(p_adapAddress); 
     } 
    } 
} 


int _tmain(int argc, _TCHAR* argv[]) 
{ 
    std::vector<std::string> vPhysicalAddress; 
    GetEthernetDevices(vPhysicalAddress); 
} 
+0

슈퍼 ... 고마워 .. :) –