Извлечение MAC-адресов из UUID
Вопрос
Программа, над которой я работаю, предполагает, что UUID, сгенерированный вызовом Windows RPC API UuidCreateSequential (), содержит MAC-адрес основного адаптера Ethernet. Это предположение правильно или я должен использовать другой метод для получения MAC-адреса?
Решение
Я бы не стал полагаться на это - единственная причина, по которой UuidCreateSequential имеет MAC-адрес, заключается в том, что он пытается гарантировать, что UUID уникален во всей сети. Кроме того, почему вы используете такой странный способ получить MAC-адрес? Используйте WMI и фактически запросите MAC-адрес вместо побочного эффекта функции создания UUID. Р>
Другие советы
Это правильное предположение. В документации на MSDN конкретно указано, что в ней будет указан адрес локальной сети карточка на автомате. Он не упоминает ничего о сценарии с несколькими картами, но выбор основной карты выглядит логичным скачком. Р>
Если вы пишете управляемый код, я бы использовал NetworkInterface
и вызовите GetAllNetworkInterfaces ()
. Или из кода C ++ позвоните в GetAdaptersInfo
, это то, что использует управляемая реализация.
Даже если UuidCreateSequential
работает для этого, это довольно непонятный способ получения информации и скрывает потенциальные проблемы, такие как компьютер, имеющий более одного адаптера.
Только UUID версии 1 содержит MAC-адрес, и только если исходный генератор имел доступ к MAC-адресу для начала. Если исходный генератор не имел доступа к MAC-адресу, он использовал бы 6 случайных байтов, полученных из криптографически безопасного генератора случайных чисел, в соответствии с разделом 4.5 RFC 4122. Из-за этого нет гарантии, что MAC-адрес указанный в UUID на самом деле является MAC-адресом.
В большинстве случаев единственной причиной, по которой кому-либо понадобится анализировать MAC-адрес по UUID, является судебная экспертиза. Посмотрите, например, UUID, встроенные в документ Word для вируса Мелисса. Следователи извлекли MAC-адрес из этих идентификаторов и сопоставили его с MAC-адресом основного сетевого адаптера подозреваемого.
Если вы пытаетесь получить MAC-адрес вашего собственного компьютера, есть гораздо лучшие способы сделать это.