是否可以通过在 iOS 7 越狱设备上使用私有 API 来获取周围网络的 SSID 列表?
我知道关于MobileWiFi.framework管理 iOS 上的 WiFi 功能。 (它取代了过时的 Apple80211 框架。)
这是 4 年前的答案如何使用它:访问和使用移动WiFi.framework
我尝试在 iOS 7 上使用这些方法,但没有成功。
在该解决方案的作者的评论之一中,我收到以下答案:
scanNetworks
失败是因为该代码已经有 4 年历史了。正如我在回答中所描述的,您必须使用新的框架才能获得等效的功能(至少从 iOS 5 开始您就必须这样做)。如果您尝试使用 iOS 7 执行此操作,我建议您发布新问题.
p.s.
这不是一个复制 of 获取 iOS 7 范围内的 SSID。我问关于越狱这些功能的方法。
UPD:
上面的链接和 creker 的答案中也有工作代码。但需要通过沙箱限制。
所以,正确的问题是:有没有办法用常规的 iOS 应用程序来做到这一点?
这是我在iOS5-7上使用的
void* library = dlopen("/System/Library/SystemConfiguration/IPConfiguration.bundle/IPConfiguration", RTLD_LAZY);
int (*apple80211Open)(void*) = (int(*)(void*))dlsym(library, "Apple80211Open");
int (*apple80211Bind)(void*, NSString*) = (int(*)(void*, NSString*))dlsym(library, "Apple80211BindToInterface");
int (*apple80211Close)(void*) = (int(*)(void*))dlsym(library, "Apple80211Close");
int (*apple80211Scan)(void*, NSArray**, void*) = (int(*)(void*, NSArray**, void*))dlsym(library, "Apple80211Scan");
void *airport = NULL;
apple80211Open(&airport);
apple80211Bind(airport, @"en0");
NSArray* networks = nil;
apple80211Scan(airport, &networks, [NSDictionary dictionary]);
//"networks" is an array of NSDictionary objects for all the visible Wi-Fi networks
apple80211Close(airport);
dlclose(library);
IPConfiguration
不是胖二进制文件。它仅包含一种与设备匹配的架构。因此,如果您计划支持arm64设备,您还必须为arm64编译代码——32位应用程序无法加载64位dylib。 armv7 和 arm64 足以满足所有现代设备的需求。
UPDATE
不幸的是,即使在越狱设备上,此代码也无法在常规 iOS 应用程序中运行。越狱不会关闭沙箱,这就是代码不起作用的原因。要使此代码正常工作,您需要将应用程序放置在外部/var/mobile/Applications
不应用沙箱限制的目录。它可以是一个守护进程、一个调整项或一个 GUI 应用程序/Applications
目录。默认情况下,该目录中的应用程序没有任何限制,可以访问任何私有 API。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)