簡體   English   中英

使用私有API在iOS 7上掃描網絡(SSID)

[英]Scan networks (SSID's) on iOS 7 by using private API

是否可以通過iOS 7 Jailbroken設備上的私有API獲取SSID的網絡列表?

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

這是4歲回答如何使用它: 訪問和使用MobileWiFi.framework

我嘗試在iOS 7上使用這些方法,但沒有運氣。

在此解決方案作者的評論之一中,我收到了以下答案:

scanNetworks失敗,因為該代碼現在scanNetworks 4年歷史。 正如我在回答中所描述的那樣,您必須使用新的框架來獲得相同的功能(至少從iOS 5開始)。 如果您嘗試使用iOS 7,我建議發布一個新問題

PS

它不是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目錄之外,而不應用沙箱限制。 它可以是/Applications目錄中的守護進程,調整或GUI應用/Applications 默認情況下,該目錄中的應用程序沒有任何限制,可以訪問任何私有API。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM