Получение MAC-адреса устройства - хорошее решение?

Я слышал, что это невозможно с моей текущей библиотекой winpcap.

Это правда? Я вижу много примеров в сети, но потом в комментариях говорится: «Это не работает».

Как лучше всего получить MAC-адрес локальной машины?


person bobber205    schedule 15.01.2010    source источник
comment
Хорошее решение для чего? Если вы имеете в виду создание уникального идентификатора компьютера для лицензирования, я бы сказал, что на него не следует полагаться. Что происходит, когда пользователь меняет сетевую карту, имеет 2 карты, но не имеет сетевой карты?   -  person Ash    schedule 15.01.2010


Ответы (3)


Один из распространенных методов - использование битов из UUID, но это не совсем надежно. Например, он вернет значение даже на машине, на которой нет сетевого адаптера.

К счастью, есть способ, который надежно работает с любой достаточно свежей версией Windows. MSDN говорит, что он возвращается только к Windows 2000, но если память не изменяет, он также работает на NT 4, начиная с SP 5, на случай, если кто-то все еще использует NT 4.

#include <windows.h>
#include <iphlpapi.h>
#include <stdio.h>

int main() {         
    IP_ADAPTER_INFO *info = NULL, *pos;
    DWORD size = 0;

    GetAdaptersInfo(info, &size);

    info = (IP_ADAPTER_INFO *)malloc(size);

    GetAdaptersInfo(info, &size);

    for (pos=info; pos!=NULL; pos=pos->Next) {
        printf("\n%s\n\t", pos->Description);
        printf("%2.2x", pos->Address[0]);
        for (int i=1; i<pos->AddressLength; i++)
            printf(":%2.2x", pos->Address[i]);
    }

    free(info);
    return 0;
}

Пожалуйста, простите древний код C ...

person Jerry Coffin    schedule 15.01.2010
comment
Это работало само по себе в проекте, но в проекте с winpcap я пытался использовать его, в нем было много ошибок компилятора в netioapi.h - person bobber205; 17.01.2010

Не существует такого понятия, как «MAC-адрес», если у компьютера> 1 сетевая карта. Вы можете запросить эту информацию с помощью WMI, http://techsupt.winbatch.com/TS/T000001002F19.html для получения более подробной информации.

person Ana Betts    schedule 15.01.2010

GetAdaptersAddresses () IPHelper
http://msdn.microsoft.com/en-us/library/aa365915%28VS.85%29.aspx
Я успешно использую WinCE для получения статуса operstatus, также должен работать с MAC-адресом.

person XAder    schedule 15.01.2010