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中)?
对于任何偶然发现这个问题的人来说,这是我的图书馆访问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探索包含信息的返回指针.或者调用示例输出的描述方法.
截至2012年7月更新(iOS 5.0)
您尝试使用的代码非常陈旧.这东西(如WiFiManager或MobileWiFi)是在一个私人的框架.这意味着,如果从操作系统版本到版本,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中安装它,以便完全工作.或者,可能不得不将一些权利添加到您的沙盒应用程序中.
| 归档时间: |
|
| 查看次数: |
17078 次 |
| 最近记录: |