iOS конвертирует CFUUID в MAC-адрес - PullRequest
9 голосов
/ 30 декабря 2011

Я знаю, что CFUUID генерируется из MAC-адреса и некоторых других вещей. Так есть ли в любом случае вернуть MAC-адрес от CFUUID?

У нас есть несколько устройств Bluetooth, и все, что пользователь знает, это последние 3 части MAC-адреса, записанного на устройстве. Поэтому мы хотим дать пользователю возможность выбрать правильное устройство. Со стороны iOS выглядит все, что у нас есть CFUUID. Так есть ли способ конвертировать UUID обратно в MAC-адрес?

Или даже лучше, если есть способ получить MAC-адрес периферийного устройства напрямую, а не UUID, но, похоже, это невозможно

Спасибо

Ответы [ 3 ]

1 голос
/ 15 февраля 2014

Я искал способ развернуть независимые от платформы статические конфигурации устройств BLE. Я был обескуражен (UUID Apple не имеет смысла +/-, а MAC / BDADDR, который можно получить на большинстве / всех других платформах, недоступен из CoreBluetooth). К счастью, я заметил, что профиль «Служба информации об устройстве» (0x180A) содержит атрибут «System ID» (0x2A23), который кодирует уникальный MAC-адрес устройства / адрес BDADDR. Однако я не знаю, обязательно ли для устройства BLE предоставлять эту услугу.

1 голос
/ 03 сентября 2013

Что ж, как вы могли узнать из комментариев к вашему вопросу, ответ однозначен: НЕТ. Невозможно (практически) получить семена, которые генерировали конкретный UUID. При условии, что на самом деле алгоритм, который сгенерировал ваш UUID, использовал MAC-адрес вашего устройства для его генерации, и я предполагаю, что вы не можете гарантировать, что это относится к используемому генератору UUID, если у вас нет доступа к коду генератора UUID или Алгоритм ( UUID версии 1, вероятно? ), и это не непрозрачная операция для вас (Немедленный отказ от самой цели алгоритма генерации uuid).

Хотя вы явно на что-то рассчитываете, когда говорите, что для генерации UUID может использоваться MAC-адрес устройства, другие компоненты, такие как метки времени, хэширование, UDID (устройства iOS) и так далее. Дело в том, что MAC-адрес может быть лишь одним из многих факторов, используемых для генерации UUID, поэтому, если вы потратите много вычислительной мощности на попытки деконструировать его из большой выборки UUID, генерируемых той же системой под такие же условия; Мы, вероятно, будем говорить о том, что квантовый компьютер тратит впустую вычислительные мощности, пытаясь исследовать столько комбинаций, сколько частиц в наблюдаемой вселенной, чтобы вы получили MAC-адрес, который вы также можете получить в качестве характеристики от периферийного устройства Bluetooth, если хотите, и случайно победить цель UUID на первом месте, еще раз.

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

AAAAAAAA-BBBB-CCCC-DDDD-EEEEFFFF6666 

не путается с другим классным сервисом foo или характеристикой с тем же UUID.

В общем, для получения дополнительной информации посетите Википедию или просто Руководство по программированию Core Bluetooth, сформируйте портал разработчика. Это все еще под NDA, поэтому вы должны быть зарегистрированным разработчиком iOS с активными учетными данными программы разработчика, чтобы прочитать его.

0 голосов
/ 14 октября 2016

есть способ получить MAC-адрес для устройства ios. но работает только на ios8 и позже. нет частного API. https://github.com/Baoge2012/MacAddressLibDemo

...