Netzwerk Adapter filtern



  • Hallo,

    ich ahbe folgendes Problem, ich möchte gern die vorhandenen Netzwerkadapter auflisten und die dazugehörige MAC, sowie ein paar Parameter ausgeben.
    Mir würden dabei die gerade aktiven Netzwerk Adapter, bzw. die unter den Adaptereinstellungen in der Systemsteuerung auftauchen ausreichen.
    Mein Code führt aber dazu, dass ich eine ganze Reihe Adapter finde, die dort nicht auftauchen, die aber zum Teil die Identische MAC haben, oder auch mal keine.
    Könnt ihr mir sagen woran es liegt?
    Hier der Code:

    void getNetworkInformation(std::wstring *xmlOutput)
    {
        std::wstringstream output, xmlOutputStream;
        DWORD size = 0;
        DWORD error = 0;
        ULONG family = AF_UNSPEC;
        ULONG flags = GAA_FLAG_SKIP_ANYCAST | GAA_FLAG_SKIP_MULTICAST | GAA_FLAG_INCLUDE_WINS_INFO | GAA_FLAG_INCLUDE_GATEWAYS | GAA_FLAG_INCLUDE_ALL_INTERFACES | GAA_FLAG_INCLUDE_TUNNEL_BINDINGORDER;
        PIP_ADAPTER_ADDRESSES pAddresses = NULL;
    
        xmlOutputStream << L"<network>";
    
        error = GetAdaptersAddresses(family, flags, NULL, pAddresses, &size);
        if (error == ERROR_BUFFER_OVERFLOW)
        {
            pAddresses = (IP_ADAPTER_ADDRESSES*) malloc (size);
            error = GetAdaptersAddresses(family, flags, NULL, pAddresses, &size);
            for (PIP_ADAPTER_ADDRESSES i = pAddresses; i != NULL; i = i->Next)
            {
                xmlOutputStream << L"<adapter name=\"" << i->FriendlyName << "\" type=\"" << getAdapterType(i->IfType) << L"\" state=\"" << getOperStatusString(i->OperStatus) << "\">" << std::endl;
                xmlOutputStream << getPhysicalAddress(i->PhysicalAddress, i->PhysicalAddressLength) << std::endl;
                xmlOutputStream << L"</adapter>" << std::endl;
            }
    
            free(pAddresses);
        }
        else
        {
    
        }
    
        xmlOutputStream << L"</network>" << std::endl;
        xmlOutput->append(xmlOutputStream.str());
    
        return;
    }
    

    PS: Ja, das selbstzusammengebastelte XML ist nicht das beste, aber erfüllt seinen Zweck 😃



  • Probier mal GetAdaptersInfo. Für die MAC Adresse weiss ich nichts passendes.



  • Schau mal unter:

    http://members.inode.at/anton.zechner/az/IpSwitcher.htm

    In der ZIP-Datei "Quellcode der Bibliothek" findest du die Dateien:

    NetFunctions.h
    NetFunctions.cpp

    #include "NetFunctions.h"
    
    ...
    
    NetCardInfo *pInfo;
    int          i;
    
    NetInit();
    NetUpdateCards();
    
    for(i=0;;i++)								// Karten auflisten
    	{
    	pInfo = NetGetCardInfo(i);
    	if(!pInfo)break;
    	printf("%s -> %s  mac=%s\n",pInfo->cDesciption,pInfo->cFirstIp,pInfo->cMac);
    	}
    
    pInfo = NetGetCardInfo(0);					// Karte [0] ändern
    
    //NetSetIpAddress(pInfo->cMac,"192.168.0.100\0","255.255.255.0\0",3);
    
    NetExit();
    

Anmelden zum Antworten