Falsche Ausgabe bei MAC funktion...



  • Im folgendem Code wird eine falsche Ausgabe ausgegeben:

    string GetMACAddress(int adapternumber)
    {
     int nAdapterCount = 0;
     ULONG ip;
     ULONG buflen;
     PIP_ADAPTER_INFO pAdInfo = NULL;
     PIP_ADAPTER_INFO pAdInfo_c = NULL;
    
     buflen = 0;
     GetAdaptersInfo(pAdInfo, &buflen); //since buflen=0, buffer is
        // too small. function returns required buffersize in buflen.
     pAdInfo = (struct _IP_ADAPTER_INFO *)new UCHAR[buflen+1];
     pAdInfo_c = pAdInfo;
     if (GetAdaptersInfo(pAdInfo, &buflen) == ERROR_SUCCESS)
     {
      do
      {
       ip = inet_addr(pAdInfo->IpAddressList.IpAddress.String);
       if ((ip != 0)&&(ip != 0x7f000001))
       {
        nAdapterCount++;
        if ((nAdapterCount == adapternumber)||(adapternumber == 0))
        {
         if (pAdInfo->AddressLength != 0)
         {
          string macstr;
          for (int i = 0; i < (int)pAdInfo->AddressLength; i++)
          {
           		  ostringstream fmt;
    			fmt << " " << setbase(16) << setw(2) << setfill('0') << pAdInfo->Address[i];
    			string temp = fmt.str();
    
           macstr += temp;
          }
          delete pAdInfo;
          return macstr;
         }
        }
       }
      } while ((pAdInfo->Next != NULL)&&((pAdInfo = pAdInfo->Next) !=
    pAdInfo));
     }
     delete pAdInfo_c;
     return "";
    }
    
    int main()
    {
    	cout << GetMACAddress(1) << endl;
    	return 0;
    }
    


  • // Prints the MAC address stored in a 6 byte array to stdout
    static void PrintMACaddress(unsigned char MACData[])
    {
    	printf("MAC Address: %02X-%02X-%02X-%02X-%02X-%02X\n", 
    		MACData[0], MACData[1], MACData[2], MACData[3], MACData[4], MACData[5]);
    }
    
    // Fetches the MAC address and prints it
    static void GetMACaddress(void)
    {
    	IP_ADAPTER_INFO AdapterInfo[16];			// Allocate information for up to 16 NICs
    	DWORD dwBufLen = sizeof(AdapterInfo);		// Save the memory size of buffer
    
    	DWORD dwStatus = GetAdaptersInfo(			// Call GetAdapterInfo
    		AdapterInfo,							// [out] buffer to receive data
    		&dwBufLen);								// [in] size of receive data buffer
    	assert(dwStatus == ERROR_SUCCESS);			// Verify return value is valid, no buffer overflow
    
    	PIP_ADAPTER_INFO pAdapterInfo = AdapterInfo;// Contains pointer to current adapter info
    	do {
    		PrintMACaddress(pAdapterInfo->Address);	// Print MAC address
    		pAdapterInfo = pAdapterInfo->Next;		// Progress through linked list
    	}
    	while(pAdapterInfo);						// Terminate if last adapter
    }
    


  • Danke, aber ich möchte nur die MAC Adresse in einem String gespeichert haben damit ich später damit weiter arbeiten kann.



  • Wie wäre es wenn du den Fehler suchst und ihn dann verbesserst?



  • Ich glaube es liegt an dem:

    ostringstream fmt;
                fmt << " " << setbase(16) << setw(2) << setfill('0') << pAdInfo->Address[i];
                string temp = fmt.str();
    

    Doch ich bin mir nicht sicher, aber ich glaube es liegt an der Formatierung.



  • kernel64 schrieb:

    Danke, aber ich möchte nur die MAC Adresse in einem String gespeichert haben damit ich später damit weiter arbeiten kann.

    dann benutz' doch in der funktion 'PrintMACaddress' statt 'printf' ein 'sprintf'...



  • Also bei mir funktioniert as nicht 😮

    Hab den Code 1zu1 in MFC übernommen.


Anmelden zum Antworten