Aufrufen und Verwenden von MobileWiFi.framework

8

Für ein persönliches Projekt von mir versuche ich, iPhone WiFi Signalstärke zu erhalten. Ich bin mir vollkommen bewusst, dass dies im Land der undokumentierten Güte liegt, also bitte unterlassen Sie die "No Appstore" -Antworten. :)

Anywho, ich habe auf früheren WiFi Network Scanner Apps ( WiFi Stumbler ) nachgelesen ), aber ich fürchte, die meisten (wenn nicht alle) spiegeln veraltete SDK-Dokumentation wider. Hoffentlich bietet diese Frage auch zentralisiertes / aufschlussreiches Material mit dem neuesten iPhone SDK 3.1.2.

Hier ist mein unvollständiger / nicht funktionierender Code:

.h

%Vor%

.m

%Vor%

Wenn es auf dem Gerät ausgeführt wird, erzeugt es meine immer noch so beliebten ...

  

Ausnahmetyp: EXC_BAD_ACCESS (SIGSEGV)

Ich denke, der dynamische Ladeaufruf lädt nichts. Das Verzeichnis: / System / Library / PrivateFrameworks / listet nur eine Info.plist-Datei ohne Binärdateien oder Aliase auf.

Wahrscheinlich etwas schrecklich falsch machen (falsches Verzeichnis?) ... schätze jede Hilfe!

Auch als Follow-up. Um die WiFi-Informationen zu extrahieren, könnte dies folgendermaßen geschehen:

%Vor%

Und meine Fragen sind 1) Hat irgendjemand etwas Glück dabei gehabt? 2) Wie erhalten Sie einen Header-Dump wie ich mit Class-Dump auf Objective-C-Bibliotheken verwenden würde (weil MobileWifi in C ist)?

    
Rev316 07.01.2010, 03:54
quelle

4 Antworten

8

Für jeden, der über diese Frage stolpert, hier ist meine Bibliothek, um auf 802.11-Netzwerke zuzugreifen. Obwohl Apple behauptet, alle Anwendungen zu verwerfen, die private Frameworks verwenden, gibt es im AppStore mehrere geschlossene WiFi-Anwendungen. Verwenden Sie auf eigene Gefahr.

Diese Bibliothek funktioniert mit dem iPhone SDK 3.1.2.

Verwenden:

%Vor%

Ergebnis:

  

Ein Networks NSDictionary eines Info NSDictionary.

Verwenden Sie CFShow, um den zurückgegebenen Zeiger zu untersuchen, der Informationen enthält. Oder rufen Sie die Beschreibungsmethode für die Beispielausgabe auf.

    
Rev316 12.01.2010, 21:43
quelle
5

Aktualisierung ab Juli 2012 (iOS 5.0)

Der Code, den Sie verwenden möchten, ist ziemlich alt. Dieses Zeug (z. B. WiFiManager oder MobileWiFi ) befindet sich in einem privaten Rahmen. Das bedeutet, Apple kann und wird es oft ändern oder von der OS-Version zur Version wechseln.

Ich habe nm im MobileWifi-Framework ausgeführt und keinen dieser Funktionsnamen gesehen. Also, ich denke, deshalb schlägt dein Code fehl.

  

$ pwd   /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.0.sdk/System/Library/PrivateFrameworks/MobileWiFi.framework

     

$ nm MobileWiFi | grep 80211

     

$

Ich nehme an, es könnte notwendig sein, nm auf dem tatsächlichen Geräte-Framework auszuführen, aber ich habe meine Zeit nicht verschwendet, nachdem ich das betrachtet habe:

Diskussion dieses Frameworks und der Folgemaßnahmen.

>

Es sieht so aus, als könnten Sie jetzt äquivalente (?) Funktionen im IPConfiguration Framework finden. Probieren Sie diesen Code:

%Vor%

Ich habe es auf einem jailbroken iOS 5.0.1 Telefon laufen lassen und es funktionierte (lud die dylib und fand einige der Apple80211 Funktionen). Von diesem Thread, mit dem ich verlinkt bin, sieht es so aus, als ob du dies in / Anwendungen auf einem jailbroken Telefon installieren musst, um vollständig zu funktionieren. Oder, möglicherweise müssen Sie sich mit dem Hinzufügen einiger Berechtigungen zu Ihrer Sandbox-App herumschlagen.

    
Nate 28.07.2012 00:48
quelle
4

Diese Apple80211xxx-Funktionen sind in MobileWiFi.framework nicht vorhanden (Sie können überprüfen, ob das Tool 'nm' für die SDK-Binärdateien verwendet wird).

(Außerdem ist es unmöglich, einen C-Header aus Binaries zu entfernen, da alle Typinformationen während des Kompilierens entfernt werden. Sie müssen es selbst zurückentwickeln oder darauf warten, dass jemand es tut.)

    
kennytm 07.01.2010 06:30
quelle
2

Ich bin nicht sicher, ob das ein Problem wäre, aber open / close / bind sind Namen, die bereits verwendet werden (Standard-C-Bibliothek).

Die Binärdatei existiert nicht, da sie im Feld shared_cache gespeichert ist (dlopen ist erfolgreich, weil die Bibliothek technisch geladen ist.); Beachten Sie jedoch, dass Sie nicht überprüfen, ob libHandle, open, close, bind oder scan gültig sind, wenn Sie sie aus den dl * -Funktionen abrufen.

    
Dustin Howett 07.01.2010 06:01
quelle

Tags und Links