Для персонального моего проекта я пытаюсь получить мощность сигнала iPhone WiFi. Я полностью осведомлен что это на земле недокументированного совершенства, поэтому не воздержитесь от "Никакого Appstore" ответы.:)
Anywho, я читал на предыдущих Приложениях для Сетевого сканера WiFi (Хромой WiFi), но я боюсь, что большинство (если не все) отражает устаревшую документацию SDK. Хотелось бы надеяться, этот вопрос также предоставит некоторым централизованным / проницательный материал с новым iPhone SDK 3.1.2.
Вот мой код incomplete/not-working:
.h
void *libHandle;
void *airportHandle;
int (*open)(void *);
int (*bind)(void *, NSString *);
int (*close)(void *);
int (*scan)(void *, NSArray **, void *);
.m
libHandle = dlopen("/System/Library/PrivateFrameworks/MobileWiFi.framework/MobileWiFi",RTLD_LAZY);
open = dlsym(libHandle, "Apple80211Open");
bind = dlsym(libHandle, "Apple80211BindToInterface");
close = dlsym(libHandle, "Apple80211Close");
scan = dlsym(libHandle, "Apple80211Scan");
open(&airportHandle);
bind(airportHandle, @"en0");
NSLog(@"Result %@",libHandle);
При выполнении на устройстве оно произведет мое очень любимое...
Тип исключительной ситуации: EXC_BAD_ACCESS (SIGSEGV)
Я думаю динамический вызов загрузки, ничего не загружает. Каталог:/System/Library/PrivateFrameworks/только перечисляет файл Info.plist без двоичных файлов или псевдонимов.
Вероятно, делая что-то ужасно неправильно (неправильный каталог?)... ценят любую справку!
Кроме того, как развитие. Для извлечения информации о WiFi это могло бы быть сделано:
GetInfoCopy = dlsym(libHandle, "Apple80211GetInfoCopy");
И мои вопросы 1) Кто-либо, имел удачу с этим? 2) Как Вы получаете дамп заголовка как, я был бы с помощью с дампом класса на библиотеках Objective-C (потому что MobileWifi находится в C)?
Для любого, кто наступает на этот вопрос, вот моя библиотека для доступа к сетянам 802.11. Хотя Apple утверждает, что запрещает любые приложения, которые используют частные рамки, есть несколько замкнутых приложений Wi-Fi на AppStore. Используйте на свой риск.
Эта библиотека работает с iPhone SDK 3.1.2.
Использование:
SOLStumbler *networksManager = [[SOLStumbler alloc] init];
[networksManager scanNetworks];
Результат:
Networks Nsdictionary информационного Nsdictionary.
Используйте CFShow для изучения возвращенного указателя, содержащей информацию. Или вызовите метод описания для вывода образца.
Не уверен, что это будет проблемой, но open/close/bind - это имена, которые уже используются (стандартная библиотека C).
Двоичного файла не существует, так как он хранится в dyld shared_cache (dlopen получится, потому что технически библиотека 'загружена'); однако, я заметил, что вы не проверяете, действительны ли какие-либо из libHandle, open, close, bind или scan, когда вы получаете их из dl* функций.
.Эти функции Apple80211xxx не существуют в MobileWiFi.framework (вы можете проверить с помощью утилиты `nm' в бинарных файлах SDK).
(Также невозможно выгрузить заголовок C из двоичных файлов, так как при компиляции удаляется вся информация о типах. Вам нужно перепроектировать её самостоятельно или подождать, пока кто-нибудь сделает это.)
.