MAC adresse herausfinden



  • Hallo,
    Ich komuniziere mit indy Komponenten im Netzwerk.
    Nun muss ich die MAC Adresse der Geräte herausfinden (nicht die meines Rechners)
    Die indy Komponente liefert nix, oder übersehe ich da was?
    Wie macht man das? Liefert mir das Windows? Wie?

    EDIT:
    Habe inzwischen einen Weg gefunden, mittels Iphlpapi.dll und SendARP

    Nur eigentlich will ich kein extra Paket versenden, letztendlich genügt mir die Info aus der ARP-Tabelle (wenn kein Eintrag vorhanden ist, ist es auch Ok)
    Aber wie komme ich an die ARP Tabelle ran?



  • Auszug aus MSDN: http://msdn.microsoft.com/en-us/library/windows/desktop/aa366358(v=vs.85).aspx

    If the information requested is not in the ARP table on the local computer, then the SendARP function will cause an ARP request to be sent to obtain the physical address.

    MfG Stephan



  • Guck dir mal die IP Helper Functions der Win API an. Vielleicht gibt´s da eine Möglichkeit, an die MAC Adresse zu kommen.



  • Hallo,

    Dafür kann man z. Bsp. GetAdaptersInfo aus der WinAPI verwenden.

    Der folgende Code sollte alle vorhandenen MAC Adressen liefern.

    std::vector<std::string> getMacAddress() {
    	std::vector<std::string> result;
    	char data[4096];
        ZeroMemory( data, 4096 );
    	unsigned long  len = 4000;
    	PIP_ADAPTER_INFO pinfo = ( PIP_ADAPTER_INFO ) data;
    
        DWORD ret = GetAdaptersInfo( pinfo, &len );
        if( ret != ERROR_SUCCESS )
    		return result;
    
    	while ( pinfo ) {
    		if( pinfo->Type == MIB_IF_TYPE_ETHERNET )  {// ignore software loopbacks and other strange things that might be present
    			std::stringstream str;
    			const int count = pinfo->AddressLength;
    			for(int k = 0; k < count - 1; k++ ) {
    				int val = static_cast<int>(pinfo->Address[k]);
    				str << std::hex << std::setfill ('0') << std::setw (2) << val << "-";
    			}
    			int val = static_cast<int>(pinfo->Address[count - 1]);
    			str << std::hex << std::setfill ('0') << std::setw (2) << val;
    			result.push_back(str.str());
    		}
    		pinfo = pinfo->Next;
    	}
    
    	return result;
    }
    


  • AntonWert schrieb:

    Nun muss ich die MAC Adresse der Geräte herausfinden (nicht die meines Rechners)

    😮 🙂





  • Jansen schrieb:

    AntonWert schrieb:

    Nun muss ich die MAC Adresse der Geräte herausfinden (nicht die meines Rechners)

    😮 🙂

    Sorry, hatte ich wohl überlesen.



  • Falls das Thema noch aktuell ist... Ich habe das gefunden, relativ simpel. Jedoch weiß ich nicht, ob in einem modernen C++ Builder die benötigten Libs enthalten sind.

    http://msdn.microsoft.com/en-us/library/windows/desktop/aa366358(v=vs.85).aspx

    Have fun

    Edit: Ähm, du hattest eine Lösung. Sry



  • Ich frage mal ganz dumm, aber kann man hier auch die eigenen Beiträge / Posts löschen?



  • Hallo

    Das können nur die Moderatoren. Wenn du willst, kann ich deine Beiträge hier in diesem Thread löschen.

    bis bald
    akari


Log in to reply