访问和使用MobileWiFi.framework

Rev*_*316 8 iphone iphone-sdk-3.0

对于我的个人项目,我正在尝试检索iPhone WiFi信号强度.我完全清楚这是在无证善良的土地上,所以请不要回答"没有Appstore"的答案.:)

Anywho,我一直在阅读以前的WiFi网络扫描仪应用程序(WiFi Stumbler),但我担心大多数(如果不是全部)反映过时的SDK文档.希望这个问题还能为最新的iPhone SDK 3.1.2提供一些集中/有见地的材料.

这是我的不完整/不工作的代码:

.H

 void *libHandle;
 void *airportHandle; 
 int (*open)(void *);
 int (*bind)(void *, NSString *);
 int (*close)(void *);
 int (*scan)(void *, NSArray **, void *);
Run Code Online (Sandbox Code Playgroud)

.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);
Run Code Online (Sandbox Code Playgroud)

在设备上执行时,它会产生我最喜欢的......

例外类型:EXC_BAD_ACCESS(SIGSEGV)

我在想动态加载调用,没有加载任何东西.目录:/ System/Library/PrivateFrameworks /仅列出没有二进制文件或别名的Info.plist文件.

可能做了一些非常错误的事情(错误的目录?)...感谢任何帮助!

另外,作为后续行动.要提取WiFi信息,可以通过以下方式完成:

GetInfoCopy = dlsym(libHandle, "Apple80211GetInfoCopy");
Run Code Online (Sandbox Code Playgroud)

我的问题是1)有人有运气吗?2)你如何得到一个标题转储,就像我在Objective-C库中使用class-dump一样(因为MobileWifi在C中)?

Rev*_*316 8

对于任何偶然发现这个问题的人来说,这是我的图书馆访问802.11网络.虽然Apple声称拒绝任何使用私有框架的应用程序,但AppStore上有几个封闭源的WiFi应用程序.使用风险由您自己承担.

此库适用于iPhone SDK 3.1.2.

使用:

SOLStumbler *networksManager = [[SOLStumbler alloc] init];
[networksManager scanNetworks];
Run Code Online (Sandbox Code Playgroud)

结果:

信息NSDictionary的网络NSDictionary.

使用CFShow探索包含信息的返回指针.或者调用示例输出的描述方法.

  • 被警告.最近,Apple一直在强制拆除WiFi扫描仪. (2认同)

Nat*_*ate 5

截至2012年7月更新(iOS 5.0)

您尝试使用的代码非常陈旧.这东西(如WiFiManagerMobileWiFi)是在一个私人的框架.这意味着,如果从操作系统版本到版本,Apple可以而且经常会改变它或移动它.

我运行nm了MobileWifi框架,但没有看到任何这些函数名称.所以,我认为这就是你的代码失败的原因.

$ PWD /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.0.sdk/System/Library/PrivateFrameworks/MobileWiFi.framework

$ nm MobileWiFi | grep 80211

$

我想可能有必要nm在实际的设备框架上运行,但在看了之后我没有浪费时间:

讨论这个框架和后续内容.

看起来您现在可以在IPConfiguration框架中找到等效(?)函数.试试这段代码:

libHandle = dlopen("/System/Library/SystemConfiguration/IPConfiguration.bundle/IPConfiguration", RTLD_LAZY);
Run Code Online (Sandbox Code Playgroud)

我在越狱的iOS 5.0.1手机上运行它并且它工作(加载了dylib并找到了一些Apple80211功能).从我链接到的那个帖子中,看起来你可能需要在越狱手机上的/ Applications中安装它,以便完全工作.或者,可能不得不将一些权利添加到您的沙盒应用程序中.