对于私有(private)用途,我尝试使用以下代码加载 WiFi 管理器 (iOS 6.1):
airportHandle = 0;
libHandle = 0;
libHandle = dlopen(
"/System/Library/SystemConfiguration/WiFiManager.bundle/WiFiManager"
//"/System/Library/SystemConfiguration/IPConfiguration.bundle/IPConfifuration"
, RTLD_LAZY);
if(libHandle != 0)
{
disassociate = (int (*)())dlsym(libHandle, "Apple80211Disassociate");
open = (int (*)(void*))dlsym(libHandle, "Apple80211Open");
bind = (int (*)(void*, NSString*))dlsym(libHandle, "Apple80211BindToInterface");
close = (int (*)(void*))dlsym(libHandle, "Apple80211Close");
scan = (int (*)(void*, NSArray**, void*))dlsym(libHandle, "Apple80211Scan");
associate = (int (*)(void*, void*, NSString*))dlsym(libHandle, "Apple80211Associate");
info = (int (*)(void*, NSDictionary**))dlsym(libHandle, "Apple80211GetInfoCopy");
GetPower = (int (*)(void*, char*))dlsym(libHandle, "Apple80211GetPower");
SetPower = (int (*)(void*, char))dlsym(libHandle, "Apple80211SetPower");
listinfo = (int (*)(void*, NSDictionary**))dlsym(libHandle, "Apple80211GetIfListCopy");
open(&airportHandle);
bind(airportHandle, @"en0");
}
但是 libHandle 是 NULL 。
我是否需要使用越狱设备或者没有办法只使用Private API 。
谢谢,
Best Answer-推荐答案 strong>
这不是一个答案,而是一个方向。
我记得,Apple 多次移动 WiFi API(从一个框架到另一个框架)。
所以,这条路径(“/System/Library/SystemConfiguration/WiFiManager.bundle/WiFiManager”)很可能已经过时了。
即使在未越狱的 iOS 设备上,您也应该能够使用 dlopen 并获得句柄。所以,这不是问题。但是,我不确定您提到的这些 API 是否不受权利保护。
如果你有 iOS 6 模拟器,我建议你去那里尝试 grepr 并找到这些 API 所在的位置。
顺便说一句。看看这个问题。他声称他的代码适用于 iOS 6 - Iphone 802.11 Scan
关于ios - WiFiManager.bundle WiFiManager 在我尝试使用 dlopen、iOS 加载时返回 NULL,我们在Stack Overflow上找到一个类似的问题:
https://stackoverflow.com/questions/23245276/
|