使用私有 API 在 iOS 7 上扫描网络 (SSID)



是否可以通过在iOS 7越狱设备上使用私有API获得网络的SSID列表?

我知道MobileWiFi.framework管理iOS上的WiFi功能。(它取代了过时的Apple80211框架。)

这是4年前如何使用它的答案:访问&使用MobileWiFi.framework

我尝试在iOS 7上使用这些方法,但是没有成功。

在这个解决方案的作者的一个评论中,我得到了这样的答案:

scanNetworks 失败,因为该代码现在是4年前的。正如我在我的回答中所描述的,你必须使用一个新的框架来获得相同的功能(至少从iOS 5开始你就必须这样做)。如果你试图在iOS 7中做到这一点,我建议你发布一个新问题

注。

它不是在ios7范围内Get SSID's的副本。我问一下越狱这些功能的方法。


乌利希期刊指南:

有工作代码在上面的链接,并在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对于所有现代设备来说已经足够了。

不幸的是,即使在越狱设备上,这段代码也不能在普通的iOS应用程序中工作。越狱不会关闭沙箱,这就是代码无法工作的原因。要使此代码工作,您需要将应用程序放在/var/mobile/Applications目录之外,其中不应用沙箱限制。它可以是/Applications目录中的守护进程、调整或GUI应用程序。默认情况下,该目录下的应用程序没有任何限制,可以访问任何私有API。

最新更新