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

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

Я испытываю затруднения, надежно определяющие встроенный сетевой адаптер, все же.

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

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

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

Спасибо!

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

8
задан Jens 25 June 2010 в 09:27
поделиться

4 ответа

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

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

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

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

10
ответ дан 5 December 2019 в 12:55
поделиться

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

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

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

1
ответ дан 5 December 2019 в 12:55
поделиться

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

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

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

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

1
ответ дан 5 December 2019 в 12:55
поделиться

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

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

1
ответ дан 5 December 2019 в 12:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: