Как надежно получить MAC-адрес встроенного сетевого адаптера компьютера? - PullRequest
8 голосов
/ 21 июня 2010

Я пытаюсь (более или менее) однозначно идентифицировать систему для целей лицензирования.Для этой задачи я выбрал MAC-адрес встроенного сетевого адаптера компьютера, так как я могу быть уверен, что на каждом компьютере, на котором работает это программное обеспечение, он есть, и это позволяет избежать повторной активации при смене, например, жесткого диска.

IУ меня проблемы с надежной идентификацией встроенного сетевого адаптера.

Используя класс управления «Win32_NetworkAdapterConfiguration», я могу получить много MAC-адресов, включая адрес, который мне нравится, но я не нашел способа отличить встроенный адаптер от виртуальных адаптеров, установленных Windows или вирусными сканерами,Этот список, кажется, упорядочен, хотя.Интересующий меня MAC-адрес (на моей машине) указан перед другими (реальными) сетевыми адаптерами.(Список упорядочен по индексу интерфейса.)

Используя NetworkInterface.GetAllNetworkInterfaces(), я думаю, что я могу определить реальные сетевые адаптеры, отфильтровав по .NetworkInterfaceType == NetworkInterfaceType.Ethernet, но этот список кажется неупорядоченным (появляется добавленная сетевая картадо встроенного).

Сначала используется второй метод для получения списка реальных сетевых карт, а затем сортировка их по порядку появления в первом списке, надежный способ определения MAC-адреса, который я ищуза?Может ли индекс интерфейса в первом списке измениться?Я был бы рад услышать ваши мысли!

Спасибо!

PS: я знаю, что MAC-адрес может быть довольно легко изменен, но я могу с этим смириться.Я не могу жить с клиентом, который не может использовать программное обеспечение после простой установки карты WLAN =)

Ответы [ 4 ]

10 голосов
/ 21 июня 2010

Довольно низкотехнологичным решением было бы вызвать команду netstat и найти MAC-адрес адаптера, который имеет действительный IP-адрес. Я никогда не видел сбой команды netstat на машине, тогда как WMI неоднократно давал неожиданные результаты.

В любом случае, я уже делал подобную систему активации и использовал MAC-адрес в качестве идентифицирующего ключа. В конце концов, это принесло больше хлопот, чем стоило - и для меня, и для клиента! То, что я нашел, было намного лучшим балансом и меньшим количеством хлопот, состоял в том, чтобы пользователь "входил" в первый раз, когда программное обеспечение было установлено. С согласия пользователя вы можете отправить некоторую идентификационную информацию на сервер, например, его MAC-адрес.

Тогда вам нужно лишь периодически проверять базу данных активации на наличие серьезных нарушений лицензии и при необходимости деактивировать ключи. Как клиент, который ненавидит активацию продукта, и ISV, который ненавидит компьютерное пиратство, я вижу обе стороны аргумента, и таким образом он избегает ставить клиента в неудобное положение, когда ему приходится убеждать вас, что он прав, когда что-то (неизбежно) происходит неправильно.

Просто назовите несколько причин, по которым идентификация MAC может не работать ... Я использую два сетевых адаптера (проводной и беспроводной) в своем ноутбуке, в зависимости от того, на работе я или дома. Один или другой может быть отключен в любое время. Еще одна вещь, которую стоит отметить, это то, что я использую виртуальные машины довольно часто, и они не только получают свои собственные MAC, но я могу указать любой MAC, какой захочу. Затем, конечно, однажды вы обнаружите, что у вас около 100 человек в вашей базе данных с MAC всех нулей. :) Здесь ничего не гарантировано.

1 голос
/ 30 июня 2010

Чтобы получить доступ к деталям сетевого интерфейса в .Net, обратитесь к методу NetworkInterface.GetPhysicalAddress в пространстве имен System.Net.NetworkInformation.

Использование подробно описано в MSDN .

Я бы определенно сослался на ссылку, которую Райан предоставил в отношении использования MAC-адреса для идентификации.

1 голос
/ 30 июня 2010

Если вашим главным требованием является уникальная идентификация ПК, я предлагаю вам взглянуть на этот вопрос . Принятый ответ говорит о решении, а также о недостатках использования подхода с использованием идентификатора MAC-адреса

Надеюсь, это поможет

1 голос
/ 24 июня 2010

вы должны учитывать некоторые другие свойства WMI в дополнение к MAC-адресу.

Способ, с помощью которого Windows Product Activation обрабатывает это, заключается в просмотре свойств, таких как MAC-адрес (а также другой идентифицирующей информации о самой карте, такой как информация о поставщике PCI), а также некоторых общих свойств устройства (контроллеры HDD , отображать адаптеры) и обосновывать необходимость реактивации на определенных пороговых значениях. Если слишком многое из этого изменится, потребуется повторная активация.

Вот отличная статья на эту тему, и она должна дать вам пищу для размышлений о том, как подходить к выбору хороших свойств для поиска в вашей собственной системе лицензирования / активации:

http://aumha.org/win5/a/wpa.php

...