2011-12-29 15 views
9

Wiem, że CFUUID jest generowany z adresu MAC i kilku innych rzeczy. Czy jest jakiś sposób, aby odzyskać adres MAC z CFUUID?Konwersja iOS na CFUUID na adres MAC

Mamy kilka urządzeń bluetooth, a każdy użytkownik wie, że to ostatnie 3 części adresu MAC zapisanego na urządzeniu. Dlatego chcemy dać użytkownikowi i opcję wyboru odpowiedniego urządzenia. Po stronie iOS wygląda tak, jak wszystko, co mamy na CFUUID. Czy istnieje sposób konwersji UUID z powrotem na adres 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

Dzięki

+2

CFUUID nie jest generowany z MAC. Jak byś to wywnioskował?Jestem prawie pewien, że łatwiej jest uzyskać MAC i wysłać go przez HTTP lub jakikolwiek inny protokół. – Eimantas

+0

Nie mówię o UUID iPhone'a, mówię o UUID Peryferiów. Czytam online, że identyfikator UUID jest tworzony z połączenia adresu MAC i aktualnej godziny. – user1122025

+0

Powinieneś być bardziej jasny, że mówisz o CFUUID w kontekście CoreBluetooth, a jeszcze konkretniej w kontekście CBPeripheral. Dziwne jest to, że CBPeriFile mają właściwość UUID, a nie właściwość adresu, ponieważ urządzenie Bluetooth, które reprezentują, ma adres, a nie identyfikator UUID. Więc sensownym jest, że konkretny UUID dołączony do CBP jest zależny od adresu urządzenia bluetooth, ale nie widziałem żadnego potwierdzenia tego. – barrycburton

Odpowiedz

1

Cóż, jak można się nauczyłem od komentarzach do twojego pytania, odpowiedź brzmi jednoznacznie: NIE. Nie jest możliwe (praktycznie) uzyskanie nasion, które wygenerowały określony UUID. Pod warunkiem, że w rzeczywistości algorytm, który wygenerował twój UUID, użył adresu MAC twojego urządzenia do wygenerowania go i myślę, że nie możesz zagwarantować, że jest tak w przypadku generatora UUID, którego używasz, chyba że masz dostęp do kodu generatora UUID lub algorytm (UUID Version 1 probably?) i nie jest to operacja nieprzezroczysta (natychmiastowe pokonanie samego celu algorytmu generacji uuid).

Podczas gdy wyraźnie widać na czymś, gdy mówimy, że generacja UUID może używać adresu MAC urządzenia, innych składników, takich jak sygnatury czasowe, hashowania, UDID (urządzenia iOS) i tak dalej. Faktem jest, że adres MAC mógłby być tylko jednym z wielu czynników używanych do generowania UUID, więc gdybyś poświęcił dużo mocy obliczeniowej na próbę dekonstruowania go z dużej próbki UUID wygenerowanych przez ten sam system pod takie same warunki; Prawdopodobnie będziemy mówić o komputerowej mocy obliczeniowej, która marnuje moc obliczeniową, próbując odkryć tyle kombinacji, co cząstki w obserwowalnym wszechświecie, dzięki czemu otrzymasz adres MAC, który równie dobrze możesz uzyskać jako cechę z urządzenia peryferyjnego Bluetooth, jeśli chcesz, i przypadkowo, pokonując w celu uzyskania identyfikatora UUID po raz kolejny.

Z drugiej strony, poza tym, co ktoś skomentował na twoje pytanie: powodem, dla którego uważasz, że UUID jest nudne, opierając się na idei poprzedniego akapitu, jest to, że możesz uniknąć kolizji: Generowanie duplikatów nie tylko pochodzących z tych generowane przez komputer, ale z wszystkich innych generowanych przez każde urządzenie tam w każdej chwili dnia (w celu uwierzytelnienia żądań, tworzenia kluczy indeksowych w bazie danych lub identyfikowania usług i charakterystyk), więc twoja fajna usługa lub cecha o nazwie:

AAAAAAAA-BBBB-CCCC-DDDD-EEEEFFFF6666 

nie myli się z inną fajną usługą foo lub cechą z tym samym UUID.

Ogólnie, aby uzyskać więcej informacji, sprawdź wikipedia lub po prostu Przewodnik programowania Core Bluetooth, tworząc portal dla programistów. Jest nadal objęty umową NDA, więc musisz być zarejestrowanym programistą iOS z aktywnymi referencjami programu dla programistów, aby go przeczytać.

1

Szukałem sposobu na wdrożenie niezależnych od platformy, statycznych konfiguracji urządzeń BLE. Byłem zniechęcony (Apple UUIDs są +/- bez znaczenia, a MAC/BDADDR, które można uzyskać na większości/wszystkich innych platformach, nie jest dostępny z CoreBluetooth). Na szczęście zauważyłem, że profil "Device Information Service" (0x180A) zawiera atrybut "System ID" (0x2A23), który koduje unikalny adres MAC/BDADDR urządzenia. Nie wiem jednak, czy urządzenie BLE jest obowiązkowe, aby ujawnić tę usługę.