Wie kann ich HTTP-Anfragen von einem iPad umleiten?

116

Da wir auf einem iPad die Hosts-Datei nicht bearbeiten können (ohne Jailbreak), wie können wir den Web-Verkehr willkürlich auf eine andere URL umleiten?

Dies ist wichtig, wenn Sie beispielsweise eine Website entwickeln, die eine Virtual Host-Konfiguration verwendet und auf eine Entwicklungsmaschine umleiten möchte.

(Dies hängt mit dieser Frage zusammen: Kann ich die Hostdatei eines iPad bearbeiten? )

tremoloqui
quelle

Antworten:

88

Um diese Einschränkung des iPad zu umgehen, verwenden Sie einen HTTP-Proxyserver, z. B. Squid , der auf einem anderen Computer ausgeführt wird, auf dem Sie die Hosts-Datei bearbeiten können.

Auf dem iPad Unter Einstellungen -> Netzwerk -> Wi-Fi -> (Ihr Netzwerk) gibt es eine HTTP-Proxy-Einstellung, die auf manuell eingestellt werden kann. Geben Sie hier Ihre Proxy-Informationen ein.

Sobald dies eingerichtet ist, können Sie das iPad so manipulieren, als würden Sie die Hosts-Datei ändern.

tremoloqui
quelle
3
Nur für die Aufzeichnung würde ich sagen, dass es ziemlich einfach ist, Tintenfisch mit Macports zu installieren "sudo port install squid"
MiQUEL
1
oder yum install squidauf Fedora
Abhishek
3
oder apt-get install squidauf Ubuntu
Jess Telford
3
Hinweis: Starten Sie den Squid-Dienst jedes Mal neu, wenn Sie die Hosts-Datei auf Ihrem Squid-Server bearbeiten, um sicherzustellen, dass die Änderungen wirksam werden. Unter Ubuntu ist das so sudo service squid3 reload. Außerdem - und möglicherweise handelt es sich um ein Konfigurationsproblem, das für meinen Entwicklungsserver spezifisch ist - muss ich auf meinem iPad manuell http: // eingeben, damit die Adressauflösung ordnungsgemäß funktioniert.
Andy Giesler
1
Eine andere, einfachere Möglichkeit, dies zu tun, ist mit einem Tool, das ich geschrieben habe: testProxy. Keine Konfiguration erforderlich: github.com/edwinm/testProxy
edwin
71

Ich habe festgestellt, dass Sie nur die WLAN-Einstellungen in Ihrem iPad ändern müssen, um die IP-Adresse Ihres Entwicklungscomputers als HTTP-Proxy zu verwenden (wie im oben genannten Artikel erläutert ):

Geben Sie hier die Bildbeschreibung ein

Auf diese Weise reicht es aus, auf Ihrem iPad auf Ihre Webanwendung zugreifen zu können, indem Sie die URL des virtuellen Hosts eingeben (z local.mywebapp.com. B. ). Es ist einfach und schnell, aber im Gegensatz zu Will Koehlers Lösung können Sie vom iPad aus nicht auf das Internet zugreifen. Meistens ist dies jedoch kein wirkliches Problem, da Sie nur Ihre eigene Anwendung testen möchten.

Stéphane
quelle
1
Gute Antwort. Wenn Sie eine Rails-App mit Webrick testen, stellen Sie einfach die IP-Adresse Ihres
Entwicklungscomputers
4
Wenn Sie Wamp oder uWamp unter Windows verwenden, stellen Sie den Port auf ein 80.
Epoc
10
Was ist mit Fällen wie meinem, in denen Ihre lokale App Daten von verschiedenen APIs im Internet abruft?
Jared Eitnier
28

Richten Sie die Hosts-Datei auf einem Computer ein, auf dem ein Proxyserver wie Fiddler oder Charles ausgeführt wird, und konfigurieren Sie das iPad so, dass dieser Computer als HTTP-Proxy verwendet wird.

Hier finden Sie Anweisungen dazu mit Fiddler: http://conceptdev.blogspot.com/2009/01/monitoring-iphone-web-traffic-with.html

Und das ist für Charles: http://www.ravelrumba.com/blog/ipad-http-debugging/

sagi
quelle
Vielen Dank, dass Sie die Windows / Mac-Optionen ausgearbeitet haben.
Tremoloqui
2
Für uns Windows-Entwickler ist Fiddler eine großartige Option, da die meisten Entwickler es bereits installiert haben.
Josh Mouch
11

Wenn Sie bereits einen Apache- Server haben, auf dem Sie Entwickler sind, können Sie ihn problemlos als Forward-Proxy verwenden. Dies ist besonders nützlich für WordPress-Sites, die es wirklich lieben, die vollständige absolute URL zu verwenden.

Ubuntu- Beispiel unten:

Der erste Schritt besteht darin, die /etc/hostsDatei auf Ihrem Entwicklungsserver zu bearbeiten . Fügen Sie die lokale IP des Servers hinzu und zeigen Sie auf Ihre Site.

127.0.0.1 dev.mysite.com

Diese Hosts-Datei wird von Ihrem Apache-Proxy verwendet, wenn er versucht, Anforderungen von Ihrem iPhone / iPad zu lösen. Richten wir jetzt den Apache-Teil ein ...

Möglicherweise müssen Sie zuerst einige Module installieren.

sudo apt-get install libapache2-mod-proxy-html
sudo a2enmod proxy proxy_http proxy_html
sudo apache2ctl graceful

Erstellen Sie dann beispielsweise eine virtuelle Hostdatei /etc/apache2/sites-available/my-proxy

Listen *:8080
<VirtualHost *:8080>
    ProxyRequests On

    <Proxy *>
        Order Deny,Allow
        Deny from all
        Allow from 192.168.1.0/24 
    </Proxy>
</VirtualHost>

Aktivieren Sie den vhost und starten Sie Apache neu:

sudo a2ensite my-proxy
sudo apache2ctl graceful

Gehen Sie dann zu Einstellungen> Wi-Fi> Ihr Netzwerk und konfigurieren Sie einen "manuellen" Proxy. Geben Sie die IP Ihres Apache-Servers und den Port ein. Das ist es!

Der <Proxy *>Block stellt sicher, dass nur Personen in meinem lokalen Netzwerk diesen Proxy verwenden können. Wenn Sie einen Forward-Proxy verwenden, ist eine strikte Einschränkung des Zugriffs unerlässlich . Die ip2cidr- Seite ist an dieser Stelle hilfreich. (Als zusätzliche Maßnahme wird der: 8080-Port von meiner Firewall blockiert.)

Manuel Razzari
quelle
9

Ich muss Web-Apps testen, die ich auf einem iPad entwickle. Ich verwende Apache auf meinem Entwicklungscomputer, um die Webanwendungen auszuführen. Die einfachste Lösung, die ich gefunden habe, war die Verwendung von Apache mod_proxy.

Meine Entwicklungsmaschine ist in meinem Heimnetzwerk als sapphire.local sichtbar.

Die Web-App, die ich teste, wird auf dem Entwicklungscomputer unter demo.cms.dev gehostet (ich verwende POW).

Um den Proxy einzurichten, habe ich den folgenden Abschnitt zu httpd.conf hinzugefügt.

<VirtualHost *:80>
  ServerName sapphire.local
  ProxyPass / http://demo.cms.dev/
  ProxyPassReverse / http://demo.cms.dev/
  ProxyPassReverseCookieDomain .cms.dev .sapphire.local
  ProxyPreserveHost Off
</VirtualHost>

Dadurch werden eingehende Anfragen auf sapphire.local an demo.cms.dev weitergeleitet. Die Methode funktioniert jeweils nur für eine App. Ich denke, Sie könnten verschiedene Ports verwenden, um zusätzliche Apps einzurichten. Vielleicht hat jemand eine bessere Lösung?

Will Koehler
quelle
Dies zeigte mir die richtige Richtung. Anfangs erhielt ich die Fehlermeldung "Für die URL war kein Protokollhandler gültig". Ich musste sowohl proxy_module als auch proxy_http_module laden, damit es funktioniert. Vielen Dank!
Hobo
8

Es ist auch möglich, die Weblock - AdBlock für iOS-App (hier für 1,99 USD erhältlich: https://itunes.apple.com/us/app/weblock/id558818638?mt=8 ) zum Erstellen von Weiterleitungen für den Webverkehr zu verwenden .

Auf diese Weise können Sie Datenverkehr, der einer bestimmten Regel entspricht, an die angegebene IP-Adresse umleiten. Dadurch wird das Hinzufügen eines Eintrags zu / etc / hosts auf Ihrem iOS-Gerät emuliert. Wenn der in Anforderungen festgelegte Hostname von der IP verarbeitet wird, an die Sie Ihren Datenverkehr leiten, können Sie damit die private API testen oder sogar den von anderen Apps oder Websites gesendeten Datenverkehr abhören. Dies funktioniert leider nur für http / https-Verbindungen.

All dies ist nur über WLAN möglich (eine der Einschränkungen von Weblock). Der Hauptvorteil besteht darin, dass Sie alles einfach von Ihrem iOS-Gerät aus konfigurieren können und sich nicht mit der DNS / Proxy-Server-Konfiguration herumschlagen müssen.

Hier ist ein Beispiel:

  1. Ich habe Weblock folgendermaßen konfiguriert: http://i.stack.imgur.com/c5SUh.png
  2. Safari wurde geöffnet und als URL in www.google.com eingegeben
  3. Dies ist die Ausgabe im Terminal meines Mac, die auf die Verbindung an Port 1234 wartet:
    macbook-pro-tk: ~ kpr $ nc -l -v -v 1234
    GET http://www.google.com/ HTTP / 1.1
    Gastgeber: www.google.com
    Akzeptieren Sie: Text / HTML, Anwendung / xhtml + xml, Anwendung / xml; q = 0,9, * / *; q = 0,8
    Proxy-Verbindung: Keep-Alive
    PREF = ID = 7722bc3c844a7c26: TM = 1402073839: LM = 1402073839: S = 5bSJJsM2p0HgUP7L
    User-Agent: Mozilla / 5.0 (iPhone; CPU iPhone OS 7_1_1 wie Mac OS X) AppleWebKit / 537.51.2 (KHTML, wie Gecko) Version / 7.0 Mobile / 11D201 Safari / 9537.53
    Akzeptiere-Sprache: en-us
    Accept-Encoding: gzip, entleeren
    Verbindung: am Leben bleiben

Weblock ist auch gut, um einige URLs mit regulären Ausdrücken selektiv umzuleiten. Sie können Abfragen nur an einen bestimmten Endpunkt umleiten, während alle anderen Abfragen an die vom DNS zurückgegebene IP-Adresse gesendet werden. Dies ermöglicht eine noch passendere Konfiguration als / etc / hosts.

Beispiel: Wenn ich eine URL-Umleitungsregel für htt *: //somedomain.com/api/login* und einige IP- Adressen und Ports erstelle , wird an dieser IP- Adresse und an diesem Port nur Datenverkehr von dieser URL angezeigt, während der gesamte andere Datenverkehr an eine bestimmte Domäne gesendet wird. com wechselt direkt zu der vom DNS zurückgegebenen IP. Beachten Sie, dass dies sowohl für / api / login als auch für / api / login funktioniert. Someparam = somevalue dank des Platzhalterzeichens * am Ende der Regel.

koper
quelle
Vielen Dank. Ich habe es gerade gekauft und werde es ausprobieren.
Dennis Day
6

Ich habe es mit Squidman auf dem Mac geschafft. Es ist einfach einzurichten und zu verwenden.
Ich habe es in 5 Minuten eingerichtet, indem ich diesem Artikel gefolgt bin .

Aktualisieren

Eine andere Sache ist, wenn Sie eine Verbindung zu den Websites herstellen möchten, die auf dem Proxyserver ausgeführt werden. In meinem Fall ist es mein Mac. Sie müssen diese Zeile unter squidman-> Preferences-> Template kommentieren

# protect web apps running on the proxy host from external users
# http_access deny to_localhost
Lei Cao
quelle
5

Sie können einen internen DNS-Server in Ihrem Netzwerk einrichten (falls noch keiner vorhanden ist) und einen A-Eintrag einrichten. Stellen Sie dann sicher, dass Ihr DHCP so eingestellt ist, dass er den DNS-Server zurückgibt

MASSPro
quelle
3

Sie können auch http://xip.io/ verwenden. Verwenden Sie dazu die Anweisungen auf dieser Seite. Geben Sie die IP-Adresse ein und Sie werden zur entsprechenden lokalen IP weitergeleitet.

R Reveley
quelle
2

Wenn Sie eine Live-Website haben, können Sie diese verwenden:

Sie können Ihrer DNS-Konfiguration einen A-Eintrag hinzufügen: Something.IhreDomain.com, der auf Ihre lokale IP-Adresse verweist, und dann Ihrer virtuellen Hosts-Datei einen Eintrag für etwas.IhreDomain.com hinzufügen. Starten Sie Apache neu, bringen Sie Ihr iOS-Gerät in dasselbe Netzwerk und los geht's.

Daniel Powers
quelle
1

Hier ist eine Methode ohne Konfiguration für geräte- / computerübergreifende Tests eines virtuellen Mamp Pro-Hosts. Die einzige Einschränkung besteht darin, dass Sie jeweils nur eine Domain testen können. Für mich ist dies jedoch in Ordnung, wenn ich mich entwickle. Es ist jedoch sehr einfach, direkt in mamp zwischen virtuellen Hosts zu wechseln.

Ich laufe Mamp Pro 2, Berglöwe. Mein Site-Ordner enthält die einzelnen Domain-Ordner.

Ich habe festgestellt, dass diese Domäne zur Standarddomäne wird, wenn Sie die IP-Adresse oder den Computernamen des lokalen Host-Computers im Netzwerk anzeigen, wenn Sie die spezifische IP-Adresse des lokalen Computers unter dem virtuellen Host 'IP / Port' auswählen und neu starten.

Zu Testzwecken funktioniert dies auf allen Geräten im Netzwerk, einschließlich des iPad. Wenn Sie einen anderen virtuellen Host testen möchten, können Sie einfach die IP / Port-Konfiguration auf "*" zurücksetzen und dann der IP-Adresse des Computers eine andere Domäne zuweisen und neu starten.

Der Vorteil dieses einfachen Ansatzes besteht darin, dass Sie Clients Zugriff auf Ihre Entwicklungsstandorte gewähren können, wenn Sie sich im selben Netzwerk befinden, ohne eine Konfiguration auf ihrem Computer durchführen zu müssen.

Ich hoffe, dies hilft allen anderen, die nach einer einfachen Lösung suchen.

Roborew
quelle
1

Interner DNS-Server ist eine der Optionen, deren Implementierung jedoch zu umständlich war. Wir haben versucht, squid als Proxyserver zu installieren, aber das hat auch nicht funktioniert, da die URL auf einen neuen Server umgeleitet wurde und diese Umleitung auch auf der Browser-URL angezeigt wurde.

Was schließlich für uns funktioniert hat, war, Fiddler auf einem der Server zu installieren und diesen Server als Proxyserver auf dem iPad zu verwenden. Fiddler hat auch eine Funktion zum Zuordnen von Subdomains zur IP-Adresse, dh ähnlich wie / etc / hosts.

Deepak Singhal
quelle
1

Nettes Tutorial dazu: http://egalo.com/2012/05/29/testing-mac-web-site-using-local-hostname-on-mobile-device/

Eine andere Möglichkeit besteht darin, das IPad über einen lokalen Hotspot mit meinem MAC OS X zu verbinden und eine Portweiterleitung an die Entwicklungs-VM einzurichten. Um dies zu erreichen, habe ich die folgenden Schritte ausgeführt:

  • Erstellen Sie unter MAC OS X einen WLAN-Hotspot- Link
  • Verbinden Sie das iPAD mit dem Hotspot-WLAN (auf iPAD >> Einstellungen >> WLAN)
  • Fügen Sie die ServerAlias ​​zur lokalen Entwicklungs-VM hinzu (Details unten).
  • ssh-portforwarding einrichten
    ssh -NL <IP-of-hotspot-host>:<source-port>:<url-to-local-vm>:80 <user-to-vm>
  • Öffnen Sie im iPADs-Browser die Seite mit der IP
    <IP-of-hotspot-host>:<source-port>

Wo bekomme ich 'IP-of-Hotspot-Host':

Nach dem Erstellen des Hotspots gibt es einen WLAN-Punkt in den
MAC OS X-Systemeinstellungen >> Netzwerk >> WLAN

Hinzufügen der ServerAlias:

Bei meiner Entwicklungs-VM (Apache2) in /etc/apache2/sites-available/dkr.dev.local musste ich Folgendes hinzufügen:

<VirtualHost *: 80>  
    ...  
    ServerAlias ​​<IP-von-Hotspot-Host>  
    ...  
</ VirtualHost>
Christian Waltjen
quelle
1

Wenn Sie dies und einige der externen Links untersucht haben, finden Sie möglicherweise diese Antwort:

https://stackoverflow.com/a/24770097/3842985

Es handelt sich um einen leichtgewichtigen DNS-Server namens dnsmasq. Super einfach, sehr leistungsfähig und kann in Verbindung mit Ihren internen oder externen DNS-Servern verwendet werden.

Viel einfacher als die Installation von Squid, das Herumspielen mit Apache und anderen Techniken, die zeitaufwändig sind und die "Integrität" von Konfigurationen, Entwicklungsumgebungen, Testumgebungen usw. gefährden.

Eine Überlegung wert.

Ich habe das als reguläres Werkzeug für die Entwicklung und für die normale Vernetzung übernommen.

Carlos Cap
quelle
1

Die Verwendung eines benutzerdefinierten DNS-Servers auf dem PC kann dieses Problem beheben. Ich benutze und arbeite perfekt.

Überprüfen Sie https://technitium.com/dns/ , um einen benutzerdefinierten DNS-Server herunterzuladen. Welches ist mit .Net-Technologie gebaut. Nach der Konfiguration dieses Tools müssen Sie die DNS-Einstellung in "Benutzerdefiniert" ändern und die IP Ihres PCs festlegen. Verwenden Sie statische IP auf dem PC, um zu vermeiden, dass die IP-Adresse bei jedem Neustart des PCs geändert wird.

rishad2m8
quelle
0

Ich würde Relay Server (Teil von Afaria) ausprobieren, der den mobilen Verkehr basierend auf Profilen umleiten kann.

Update: tremoloquis Antwort scheint weniger Ärger und weitaus billiger zu sein.

Tomdemuyt
quelle
0

Die Antworten hier sind richtig. Ein bisschen mehr Wissen: Diese funktionieren nicht mit Cert Pinning. Sie können entweder (1) ein Domain-Platzhalterzertifikat verwenden, um das Testen Ihrer dev / test / qa-Region zu unterstützen. Und / oder (2) verwenden Sie einen Reverse-Proxy-Server wie Apache, wobei Sie zu dem Ort wechseln, an den Apache die Anforderungen innerhalb Ihres Netzwerks weiterleitet. Wenn Sie jetzt mit dem SSL-Pinning-Test beginnen, sind Sie mit den physischen Geräten tot im Wasser und können nur mit Simulator (ios) und Emulator (android) validieren.

Codeslapper
quelle