2011-12-29 13 views
9

Sé que CFUUID se genera a partir de la dirección MAC y algunas otras cosas. Entonces, ¿hay alguna forma de recuperar la dirección MAC de CFUUID?iOS convierte CFUUID a dirección MAC

Tenemos algunos dispositivos bluetooth y todo el usuario sabe son los 3 últimos partes de la dirección MAC que está escrito en el dispositivo. Entonces queremos darle al usuario y la opción de seleccionar el dispositivo correcto. En el lado de iOS, parece que todos tenemos el CFUUID. Entonces, ¿hay alguna forma de convertir el UUID a la dirección MAC?

Or even better would be if there's a way to get a peripheral's MAC address directly instead of UUID, but doesn't seem like that's possible

Gracias

+2

CFUUID no se genera desde MAC. ¿Cómo vas a derivar eso?Estoy bastante seguro de que es más fácil obtener el MAC y enviarlo a través de HTTP o cualquier otro protocolo. – Eimantas

+0

No estoy hablando del UUID de iPhone, estoy hablando de los UUID de Peripheral. Leí en línea que el UUID se crea a partir de una combinación de la dirección MAC y la hora actual. – user1122025

+0

Debería ser más claro que está hablando de CFUUID en el contexto de CoreBluetooth, y aún más específicamente en el contexto de CBPeripheral. Es extraño que CBPeripherals tenga una propiedad UUID en lugar de una propiedad de dirección, ya que el dispositivo bluetooth que representan tiene una dirección y no un UUID. Por lo tanto, tendría sentido que el UUID particular conectado a un CBPeripheral se basara en la dirección del dispositivo bluetooth, pero no he visto confirmación de esto. – barrycburton

Respuesta

1

Bueno, como se podría haber aprendido de los comentarios a su pregunta, la respuesta es claramente: no. No es posible (prácticamente) obtener las semillas que generaron un UUID particular. Siempre que, de hecho, el algoritmo que generó su UUID utilizó la dirección MAC de su dispositivo para generarlo, y supongo que no puede garantizar que sea el caso para el generador UUID que utiliza, a menos que tenga acceso al código UUID Generator o algoritmo (UUID Version 1 probably?) y no es una operación opaca para usted (Inmediatamente derrota el propósito del algoritmo de generación de uuid).

Mientras que claramente estás en algo cuando dices que la generación de un UUID puede usar la dirección MAC del dispositivo, otros componentes como marcas de tiempo, hash, UDID (dispositivos iOS) y así sucesivamente. El hecho es que la Dirección MAC, podría ser solo uno de los muchos factores utilizados para generar el UUID, de modo que si gastara una gran cantidad de poder de cómputo para intentar deconstruirlo a partir de una gran muestra de UUID generados por el mismo sistema bajo el mismas condiciones; Probablemente estaremos hablando de una computadora cuántica desperdiciando poder de cómputo tratando de explorar tantas combinaciones como partículas en el universo observable para que obtenga una dirección MAC que también puede obtener como característica de un periférico Bluetooth si así lo desea, y por cierto, derrotando el propósito de tener un UUID en primer lugar, una vez más.

Por otro lado, además de lo que alguien comentó sobre su pregunta: el motivo por el que encuentra UUID tan aburrido, basándose en la idea del párrafo anterior, es para evitar colisiones: Generar duplicados no solo provenientes de los generados por su computadora, pero de todos los demás generados por cada dispositivo disponible a cada momento del día (para autenticar solicitudes, crear claves de índice de cadena en una base de datos o identificar servicios y características) para que su servicio frío o característica se llame:

AAAAAAAA-BBBB-CCCC-DDDD-EEEEFFFF6666 

no se confunda con otro servicio foo fresco o característica con el mismo UUID.

En general, para más información consultar la wikipedia o simplemente la Guía de programación Core Bluetooth, forman el portal de desarrolladores. Todavía está bajo NDA, por lo que debe ser un desarrollador de iOS registrado con credenciales de programa de desarrollador activas para leerlo.

1

Estaba buscando una forma de implementar configuraciones estáticas, independientes de la plataforma, de dispositivos BLE. Me estaba desanimando (los UUID de Apple son +/- sin sentido, y el MAC/BDADDR que se puede obtener en la mayoría de las otras plataformas no es accesible desde CoreBluetooth). Afortunadamente, noté que el perfil "Servicio de información del dispositivo" (0x180A) contiene un atributo "Identificación del sistema" (0x2A23) que codifica la dirección MAC/BDADDR única del dispositivo. No obstante, no sé si es obligatorio que un dispositivo BLE exponga este servicio.