2010-06-21 2 views
8

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

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

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

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

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

Спасибо!

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

+0

Почему бы не кэшировать все MAC-адреса межфазного ethernet? –

+0

@rdkleine: Это приведет к поломке активации при добавлении другого сетевого адаптера. – Jens

+0

Вы можете сравнить все адаптеры со всеми кэшированными. Одной пары достаточно, не так ли? –

ответ

10

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

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

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

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

+0

Спасибо за вход!По причине, о которой вы говорите, я хочу использовать встроенный адаптер, даже если у другого адаптера есть IP-адрес, а у бортового - нет. Хорошая точка с виртуальными машинами, но я думаю, что это не будет серьезной проблемой для наших клиентов ... Это вернется и укусит меня. знак равно – Jens

1

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

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

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

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

1

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

Надеется, что это помогает

1

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

Использование: detailed on MSDN.

Я хотел бы обратиться к the link Ryan has provided в отношении использования MAC-адреса для идентификации.

Смежные вопросы