Iphone 访问&;使用mobilewi.framework

Iphone 访问&;使用mobilewi.framework,iphone,iphone-sdk-3.0,Iphone,Iphone Sdk 3.0,对于我的一个个人项目,我正在尝试检索iPhone WiFi信号强度。我完全知道这是在一个没有记录的善良的国度,所以请不要回答“没有应用商店”的问题 不管怎样,我一直在阅读以前的WiFi网络扫描仪应用程序(),但恐怕大多数(如果不是全部的话)都反映了过时的SDK文档。希望这个问题也能为最新的iphonesdk3.1.2提供一些集中的/深入的资料 以下是我的不完整/不工作代码: h m 在设备上执行时,它将生成我最喜欢的 异常类型:EXC\U坏访问(SIGSEGV) 我认为动态加载调用没有加载任何内

对于我的一个个人项目,我正在尝试检索iPhone WiFi信号强度。我完全知道这是在一个没有记录的善良的国度,所以请不要回答“没有应用商店”的问题

不管怎样,我一直在阅读以前的WiFi网络扫描仪应用程序(),但恐怕大多数(如果不是全部的话)都反映了过时的SDK文档。希望这个问题也能为最新的iphonesdk3.1.2提供一些集中的/深入的资料

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

h

m

在设备上执行时,它将生成我最喜欢的

异常类型:EXC\U坏访问(SIGSEGV)

我认为动态加载调用没有加载任何内容。目录:/System/Library/PrivateFrameworks/只列出了不带二进制文件或别名的Info.plist文件

可能做了一些非常错误的事情(错误的目录?)。。。谢谢你的帮助

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

GetInfoCopy = dlsym(libHandle, "Apple80211GetInfoCopy");

我的问题是1)有人在这方面运气好吗?2) 如何获得像我在Objective-C库上使用的类转储一样的头转储(因为MobileWifi在C中)?

我不确定这是否是一个问题,但open/close/bind是已经在使用的名称(标准C库)


二进制文件不存在,因为它存储在dyld shared_缓存中(dlopen将成功,因为库在技术上是“加载的”);但是,我注意到,当您从dl*函数检索libHandle、open、close、bind或scan时,您没有检查它们是否有效。

这些apple801xxx函数在MobileWiFi.framework中不存在(您可以使用'nm'工具对照SDK二进制文件进行检查)


(另外,由于编译过程中删除了所有类型信息,因此不可能从二进制文件中转储C头。您需要自己对其进行反向工程,或者等待他人进行反向工程。)

对于任何偶然发现此问题的人,这里是我访问802.11网络的库。尽管苹果声称拒绝任何使用私有框架的应用程序,但AppStore上有几个封闭来源的WiFi应用程序。使用风险自负

此库适用于iPhone SDK 3.1.2

使用:

结果:

信息词典的网络词典


使用CFShow查看包含信息的返回指针。或者调用示例输出的描述方法。

从2012年7月起更新(iOS 5.0)

您尝试使用的代码非常旧。这些东西(例如,WiFiManagerMobileWiFi)位于私有框架中。这意味着苹果可以,而且经常会,改变它,或者从一个操作系统版本到另一个版本

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

$pwd /开发者/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.0.sdk/System/Library/privateframes/MobileWiFi.framework

$nm MobileWiFi | grep 80211

$

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

看起来您现在可以在IPConfiguration框架中找到等效的(?)函数。请尝试以下代码:

libHandle=dlopen(“/System/Library/SystemConfiguration/IPConfiguration.bundle/IPConfiguration”,RTLD_);

我在越狱的iOS 5.0.1手机上运行了它,它运行正常(加载了动态库并找到了一些Apple80211函数)。从我链接到的那个线程来看,您可能需要在越狱手机上的/Applications中安装此程序,才能充分工作。或者,可能不得不在沙盒应用程序中添加一些权限。

请注意。最近,苹果一直在强制移除WiFi扫描仪。WiFiManager.bundle/WiFiManager->crack appit不存在,因为
Apple801Scan
accept
void*
NSDictionary*参数=[[NSDictionary alloc]init];NSArray*扫描网络;应用80211SCAN(airportHandle和scan_网络、参数)需要在参数之前放置
(void*)和
强制转换。但我认为这不是正确的方法。你能帮我修复这个文件吗?这些链接是无效的,它不适用于iphone 5S os 7.1,我得到了NullYes。在iOS 7上,如果(libHandle==NULL&&(error=dlerror())!=NULL)
,则通过该字符串传递
。但不能让它工作
scanNetworks
在附近找不到任何网络。@skywinder,
scanNetworks
失败,因为该代码已存在4年。正如我在回答中所描述的,您必须使用一个新的框架来获得等效的功能(并且您必须至少从iOS5开始)。如果你想用iOS 7做到这一点,我建议你发一封邮件。@Nate谢谢。仅供参考:它仍然适用于您的
libHandle
修复程序。但是,现在我试图弄清楚,如何通过沙箱限制。
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);
GetInfoCopy = dlsym(libHandle, "Apple80211GetInfoCopy");
SOLStumbler *networksManager = [[SOLStumbler alloc] init];
[networksManager scanNetworks];