Однозначное определение компьютера Macintosh
Существует две основных причины, почему разработчики могли бы хотеть однозначно определить определенный компьютер Macintosh. Этот technote описывает те сценарии и обеспечивает рекомендуемые решения для каждого случая.
Введение
Разработчики иногда должны однозначно определять определенный компьютер Macintosh. Приложения, требующие этого обычно, попадают в две категории:
Система отслеживания актива и управление удаленной системой
Управление цифровыми правами (DRM), включая программное обеспечение и лицензирование мультимедийного контента
В целом единственный непротиворечивый порядковый номер на компьютере Macintosh находится на этикетке со штрихкодом, присоединенной к случаю машины. На текущих версиях Mac OS X окно About This Mac и утилита System Profiler выводят на экран этот порядковый номер. На первый взгляд это, кажется, то, что разработчики хотели бы использовать в их продуктах, но существуют протесты, что этот technote обсудит.
Система отслеживания актива и управление удаленной системой
Приложения отслеживания актива позволяют системным администраторам сохранять материально-технические ресурсы компьютеров, которыми они управляют в бухгалтерских целях. Приложения для управления удаленной системой позволяют администраторам управлять системами удаленно, например, установить новое программное обеспечение, изменить пароли, просмотреть подключенные устройства, и т.д.
Эти приложения часто позволяют администратору получать доступ к информации о детали, использующей компьютеры ее порядковый номер. Это - логический атрибут для использования: это - человекочитаемый атрибут, который уникален и читаем, даже если машина нефункциональна.
Доступ к системному порядковому номеру программно
Разработчики этих приложений часто спрашивают, как получить системный порядковый номер, появляющийся в окне About This Mac или в Системном Профилировщике. До Mac OS X 10.3 «Пантер» единственные поддерживаемые средние значения получения порядкового номера должны использовать события AppleScript или Apple для запроса этой информации от утилиты System Profiler. Однако начиная с Пантеры, порядковый номер представлен в свойстве IOPlatformSerialNumber из IOPlatformExpertDevice узел в Реестре I/O. Средство доступа Реестра I/O APIs в IOKit.framework может использоваться для получения этого свойства из приложения.
Перечисление 1 читая IOPlatformSerialNumber свойство
#include <CoreFoundation/CoreFoundation.h>
#include <IOKit/IOKitLib.h>
// Returns the serial number as a CFString.
// It is the caller's responsibility to release the returned CFString when done with it.
void CopySerialNumber(CFStringRef *serialNumber)
{
if (serialNumber != NULL) {
*serialNumber = NULL;
io_service_t platformExpert = IOServiceGetMatchingService(kIOMasterPortDefault,
IOServiceMatching("IOPlatformExpertDevice"));
if (platformExpert) {
CFTypeRef serialNumberAsCFString =
IORegistryEntryCreateCFProperty(platformExpert,
CFSTR(kIOPlatformSerialNumberKey),
kCFAllocatorDefault, 0);
if (serialNumberAsCFString) {
*serialNumber = serialNumberAsCFString;
}
IOObjectRelease(platformExpert);
}
}
} |
Протесты для использования порядкового номера
Для системы возможно потерять свой порядковый номер так, чтобы это больше не появлялось или в Системном Профилировщике или в Реестре I/O. Восстановление системы путем свопинга аппаратных компонентов является одной причиной, это может произойти. Apple не документирует определенные подробные данные того, как машина может потерять свой порядковый номер. Как только порядковый номер был потерян нет никаких средних значений для восстановления его к машине.
Apple не гарантирует, что все будущие системы будут иметь читаемый программным обеспечением порядковый номер.
Оба из этих случаев иллюстрируют, почему программное обеспечение отслеживания актива должно всегда обеспечивать путь к порядковому номеру, который будет вводиться вручную.
Управление цифровыми правами (DRM)
Продукты управления цифровыми правами стремятся ограничить доступ к программному обеспечению или другой цифровой контент лицензированным пользователям того содержания. Решения DRM имеют более строгие требования для системного идентификатора:
Идентификатор должен быть уникальным, иначе лицензируемое содержание могло использоваться на большем количестве машин, чем было предназначено.
Идентификатор должен быть стабильным, иначе законные пользователи могли внезапно потерять доступ к своему лицензированному содержанию.
Идентификатор не должен быть легко изменен, иначе для нелицензированных пользователей было бы слишком просто получить доступ к содержанию.
Ethernet MAC (управление доступом к среде) адрес для основного встроенного Ethernet (или Wi-Fi, в системах без портов Ethernet, таких как MacBook Air) интерфейс является самой близкой адаптацией к этим требованиям, доступным на компьютерах Macintosh. IEEE 802 сетевых стандарта указывают универсальные адреса, потому что станция с таким адресом может быть присоединена к любому LAN в мире с обеспечением, что адрес будет уникален.
Все системы, которые могут выполнить Mac OS X, включают по крайней мере один встроенный порт Ethernet или интерфейс Wi-Fi, таким образом, гарантируют присутствие MAC-адреса. В системах больше чем с одним портом Ethernet один порт определяется первичный порт и присваивается имя интерфейса en0.
Доступ к встроенному MAC-адресу программно
Основной MAC-адрес может быть считан из Реестра I/O как показано в демонстрационном Примере кода 'GetPrimaryMACAddress'.
Протесты для использования основного MAC-адреса
Основной MAC-адрес связан с определенной системой основная логическая плата. Таким образом, в то время как адрес стабилен, он изменится, должен, основная логическая плата системы должна быть заменена. Или, клиент может просто хотеть передать их лицензированное содержание недавно купленному компьютеру. Решения DRM, полагающиеся на основной MAC-адрес, должны предоставить средние значения пользователям, чтобы повторно зарегистрировать их лицензированное содержание к различному MAC-адресу.
Netbooting начинает морщину с систем с многократными встроенными портами Ethernet. Основной порт Ethernet в этих системах является тем, подключенным к серверу NetBoot. Это означает, что поиск первичного порта может возвратить любой из встроенных MAC-адресов, в зависимости от которых порт использовался для netbooting. Обратите внимание на то, что «встроенный» не включает порты Ethernet, находящиеся на плате расширения.
Существуют другие средние значения для чтения MAC-адреса программно помимо метода Реестра I/O, используемого выборкой GetPrimaryMACAddress. Нужно использовать функцию getifaddrs. Другой должен использовать APIs CFUUID в Базовой Основе. Версии Mac OS X до Mac OS X, 10.4 «Тигров» генерировали версию 1 UUIDs, содержащие MAC-адрес. (Тигр генерирует версию 4 UUIDs, сгенерированные от случайных чисел. См. Базовую информацию о версии Основы и RFC 4122: Универсально Уникальный идентификатор (UUID) Пространство имен URN для подробных данных.)
Ни один getifaddrs ни методы CFUUID подходят в целях DRM, особенно на Mac OS X 10.3 или позже. На Пантере, ifconfig утилита поддерживает lladdr опция установить локально администрируемый MAC-адрес для интерфейса. Оба getifaddrs и APIs CFUUID возвратит локально администрируемый MAC-адрес, если Вы будете существовать. Продукт DRM, полагавшийся на этот APIs, будет уязвим для администраторского пользователя, использующего ifconfig указать тот же MAC-адрес на многократных машинах.
Наконец, для встроенного MAC-адреса (или любое свойство I/O Registry в этом отношении) возможно имитироваться хорошо осведомленными лицами. Если более устойчивый уровень безопасности требуется, такой как в случаях, где лицензированные активы имеют высокую денежную стоимость, разработчики могут хотеть исследовать многочисленные аппаратные маркеры безопасности, которые доступны.
Сетевая регистрация
Вместо того, чтобы идентифицировать уникальный компьютер Macintosh, можно решить, что Вы хотите предотвратить многократные копии того же приложения, работающего на сети. Метод, который используют некоторые разработчики, должен зарегистрировать службу на сеть, использующую Добрый день с именем, являющимся хешем единственного порядкового номера лицензии. (Конечно, Вам все еще нужен способ генерировать и распределить тот порядковый номер.) Пытается зарегистрироваться, тот же сервисный и порядковый номер возвратит ошибку что использование приложения для отклонения использования программы.
Некоторые ресурсы, к которым можно обратиться узнать больше Добрый день:
NSNetServices и руководство по программированию CFNetServices
Технические Вопросы и ответы QA1311, 'Регистрируя службу Bonjour многократно'
Протесты для использования сетевой регистрации
При использовании Добрый день таким образом, передайте в нуле для номера порта при регистрации службы. Это будет препятствовать тому, чтобы эти службы обнаружились при просмотре.
Обязательно зарегистрируйте хеш порядкового номера, не фактического порядкового номера, так как это было бы просто в использовании анализатор пакетов для получения необработанного порядкового номера.
Если у пользователя есть административные привилегии, они могут всегда отключать Добрый день демон mDNSResponder. Обязательно протестируйте Ваше приложение, чтобы удостовериться, что оно ведет себя правильно в этой ситуации.
Заключения
Схемы, описанные здесь, являются простыми способами помочь однозначно определить компьютер. Каждый подход подходит лучше всего для особых ситуаций.
Если Вы серьезно относитесь к управлению цифровыми правами, необходимо, вероятно, связываться с одной из многих компаний, специализирующихся на решениях DRM, вместо того, чтобы писать решение сами. Оба аппаратных решения (такие как аппаратные ключи USB) и программные продукты (такие как лицензирование программного обеспечения) широко доступны от третьих лиц.
Ссылки
История версии документа
| Дата | Примечания |
|---|---|
| 18.07.2011 | Незначительные изменения форматирования. |
| 25.04.2006 | Обновленный для Mac OS X. |
| 01.12.1997 | Новый документ, иллюстрирующий, как идентифицировать определенный компьютер Macintosh. |