Comment puis-je rediriger les requêtes HTTP effectuées depuis un iPad?

117

Puisque sur un iPad, nous ne pouvons pas éditer le fichier hosts (sans jailbreaking), comment pouvons-nous rediriger arbitrairement le trafic Web vers une autre URL?

Cela serait important pour quelque chose comme le développement d'un site Web qui utilise une configuration d'hôte virtuel où vous souhaitez rediriger vers une machine de développement.

(Ceci est lié à cette question: puis-je modifier le fichier hôte d'un iPad? )

trémoloqui
la source

Réponses:

88

Le moyen de contourner cette limitation de l'iPad est d'utiliser un serveur proxy HTTP, tel que Squid s'exécutant sur une autre machine où vous pouvez modifier le fichier d'hôtes.

Sur l'iPad Sous Paramètres -> Réseau -> Wi-Fi -> (Votre réseau) Il existe un paramètre de proxy HTTP qui peut être défini sur manuel. Entrez vos informations proxy ici.

Une fois que cela est configuré, vous pourrez manipuler l'iPad comme si vous changiez le fichier d'hôtes.

trémoloqui
la source
3
Juste pour mémoire, je dirais qu'il est assez facile d'installer squid en utilisant macports "sudo port install squid"
MiQUEL
1
ou yum install squidsur fedora
Abhishek
3
ou apt-get install squidsur Ubuntu
Jess Telford
3
Remarque: chaque fois que vous modifiez le fichier hosts sur votre serveur Squid, redémarrez le service Squid pour vous assurer que les modifications prennent effet. Sur Ubuntu, c'est sudo service squid3 reload. De plus - et c'est peut-être un problème de configuration spécifique à mon serveur de développement - sur mon iPad, je dois saisir manuellement http: // pour que la résolution d'adresse fonctionne correctement.
Andy Giesler le
1
Un autre moyen plus simple de le faire est d'utiliser un outil que j'ai écrit: testProxy. Aucune configuration nécessaire: github.com/edwinm/testProxy
edwin
71

J'ai trouvé qu'il vous suffit de modifier les paramètres Wifi de votre iPad pour utiliser l'adresse IP de votre machine de développement comme proxy HTTP (comme expliqué dans l' article susmentionné ):

entrez la description de l'image ici

De cette façon, il suffit de pouvoir accéder à votre application Web sur votre iPad en entrant l'url de l'hôte virtuel (par exemple local.mywebapp.com). C'est simple et rapide, mais contrairement à la solution de Will Koehler, vous ne pourrez cependant pas accéder à Internet depuis l'iPad. Mais la plupart du temps, ce n'est pas vraiment un problème, puisque vous voulez juste tester votre propre application.

Stéphane
la source
1
Très bonne réponse. Si vous testez une application rails à l'aide de Webrick, définissez simplement l'adresse IP de votre machine de développement et le port 3000
lsaffie
4
Si vous utilisez Wamp ou uWamp sous Windows, définissez le port sur 80.
Epoc
10
Qu'en est-il des cas comme le mien où votre application locale extrait des données de diverses API sur le net?
Jared Eitnier
28

Configurez le fichier hosts sur un ordinateur exécutant un serveur proxy tel que Fiddler ou Charles, et configurez l'iPad pour utiliser cet ordinateur comme proxy HTTP.

Voici les instructions pour faire cela avec Fiddler: http://conceptdev.blogspot.com/2009/01/monitoring-iphone-web-traffic-with.html

Et c'est pour Charles: http://www.ravelrumba.com/blog/ipad-http-debugging/

Sagi
la source
Merci d'avoir développé les options Windows / Mac.
tremoloqui
2
Pour nous, développeurs Windows, Fiddler est une excellente option, car la plupart des développeurs l'ont déjà installé.
Josh Mouch
11

Si vous avez déjà un serveur Apache sur lequel vous faites du développement, vous pouvez facilement l'utiliser comme proxy de transfert. Ceci est particulièrement utile pour les sites WordPress, qui aiment vraiment utiliser l'URL absolue complète.

Exemple Ubuntu ci-dessous:

La première étape consiste à modifier le /etc/hostsfichier sur votre serveur de développement. Ajoutez l'adresse IP locale du serveur, pointant vers votre site.

127.0.0.1 dev.mysite.com

Ce fichier hosts sera utilisé par votre proxy Apache lorsqu'il essaiera de résoudre les requêtes de votre iPhone / iPad. Alors configurons la partie Apache maintenant ...

Vous devrez peut-être d'abord installer certains modules.

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

Créez ensuite un fichier hôte virtuel, par exemple /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>

Activez l'hôte virtuel et redémarrez Apache:

sudo a2ensite my-proxy
sudo apache2ctl graceful

Ensuite, allez dans Paramètres> Wi-Fi> Votre réseau et configurez un proxy «Manuel». Entrez l'adresse IP de votre serveur Apache et le port. C'est tout!

Le <Proxy *>blocage garantit que seules les personnes de mon réseau local peuvent utiliser ce proxy. Limiter strictement l'accès est essentiel si vous utilisez un proxy direct. La page ip2cidr sera utile à ce stade. (Comme mesure supplémentaire, le port: 8080 est bloqué par mon pare-feu.)

Manuel Razzari
la source
9

J'ai besoin de tester les applications Web que je développe sur un iPad. J'utilise Apache sur ma machine de développement pour exécuter les applications Web, donc la solution la plus simple que j'ai trouvée était d'utiliser Apache mod_proxy.

Ma machine de développement est visible sur mon réseau domestique sous le nom sapphire.local.

L'application Web que je teste est hébergée sur la machine de développement à demo.cms.dev (j'utilise POW).

Pour configurer le proxy, j'ai ajouté la section suivante à httpd.conf.

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

Cela achemine les demandes entrantes sur sapphire.local vers demo.cms.dev. La méthode ne fonctionne que pour une application à la fois. Je pense que vous pouvez utiliser différents ports pour configurer des applications supplémentaires. Peut-être que quelqu'un a une meilleure solution?

Will Koehler
la source
Cela m'a orienté dans la bonne direction. Au départ, j'ai reçu un message d'erreur "Aucun gestionnaire de protocole n'était valide pour l'URL". J'ai trouvé que je devais charger à la fois proxy_module et proxy_http_module pour le faire fonctionner. Merci!
Hobo
8

Il est également possible d'utiliser Weblock - AdBlock pour l'application iOS (disponible pour 1,99 $ ici: https://itunes.apple.com/us/app/weblock/id558818638?mt=8 ) pour créer des redirections de trafic Web.

Cela vous permet de rediriger tout trafic correspondant à certaines règles vers une adresse IP spécifiée. Cela émulera l'ajout d'une entrée à / etc / hosts sur votre appareil iOS. Si le nom d'hôte défini dans les requêtes est géré par l'adresse IP vers laquelle vous dirigez votre trafic, vous pouvez l'utiliser pour tester l'API privée ou même pour détecter le trafic envoyé à partir d'autres applications ou sites Web. Cela ne fonctionne malheureusement que pour les connexions http / https.

Tout cela ne peut être fait qu'en Wi-Fi (l'une des limitations de Weblock). Le principal avantage est que vous pouvez facilement tout configurer à partir de votre appareil iOS et qu'il n'est pas nécessaire de jouer avec la configuration du serveur DNS / proxy.

Voici un exemple:

  1. J'ai configuré Weblock comme ceci: http://i.stack.imgur.com/c5SUh.png
  2. Ouvrir Safari et saisir www.google.com comme URL
  3. Voici la sortie du terminal sur mon Mac écoutant la connexion sur le port 1234:
    macbook-pro-tk: ~ kpr $ nc -l -v -v 1234
    OBTENEZ http://www.google.com/ HTTP / 1.1
    Hébergeur: www.google.com
    Accepter: texte / html, application / xhtml + xml, application / xml; q = 0.9, * / *; q = 0.8
    Proxy-Connection: garder en vie
    PREF = ID = 7722bc3c844a7c26: TM = 1402073839: LM = 1402073839: S = 5bSJJsM2p0HgUP7L
    User-Agent: Mozilla / 5.0 (iPhone; CPU iPhone OS 7_1_1 comme Mac OS X) AppleWebKit / 537.51.2 (KHTML, comme Gecko) Version / 7.0 Mobile / 11D201 Safari / 9537.53
    Accept-Language: en-nous
    Accept-Encoding: gzip, dégonfler
    Connexion: keep-alive

Weblock est également utile pour rediriger sélectivement certaines URL avec des expressions régulières. Vous pouvez rediriger les requêtes vers certains points de terminaison uniquement, tandis que toutes les autres requêtes vont à l'adresse IP renvoyée par le DNS. Cela permet en fait une configuration encore plus adaptée que / etc / hosts.

Exemple: si je crée une règle de redirection d'URL pour htt *: //somedomain.com/api/login* et certaines adresses IP et ports, je ne verrai que le trafic de cette URL à cette adresse IP et à ce port, tandis que tout autre trafic vers un domaine. com ira directement à l'adresse IP renvoyée par le DNS. Notez que cela fonctionnera à la fois pour / api / login et / api / login? Someparam = somevalue grâce au signe générique * à la fin de la règle.

Koper
la source
Merci. Je viens de l'acheter et je vais l'essayer.
Dennis Day
6

Je l'ai fait en utilisant squidman sur Mac. C'est facile à installer et à utiliser.
Je l'ai mis en place en 5 minutes en suivant cet article .

Mettre à jour

Une autre chose est que si vous souhaitez vous connecter aux sites Web fonctionnant sur un serveur proxy, dans mon cas, c'est mon Mac, vous devez commenter cette ligne dans squidman-> Préférences-> Modèle

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

Vous pouvez configurer un serveur DNS interne sur votre réseau (s'il n'en existe pas déjà un) et configurer un enregistrement A. Ensuite, assurez-vous que votre DHCP est configuré pour renvoyer ledit serveur DNS

MASSPro
la source
3

Vous pouvez également utiliser http://xip.io/ en utilisant les instructions sur cette page, vous pouvez entrer l'adresse IP et il vous redirigera vers l'adresse IP locale appropriée.

R Reveley
la source
2

Si vous avez un site Web en direct, vous pouvez utiliser pour cela:

Vous pouvez ajouter un enregistrement A à votre configuration DNS: something.yourdomain.com qui pointe vers votre adresse IP locale, puis ajouter une entrée pour something.yourdomain.com à votre fichier d'hôtes virtuels. Redémarrez Apache, installez votre appareil iOS sur le même réseau et vous êtes prêt à partir.

Daniel Powers
la source
1

Voici une méthode sans configuration pour les tests multi-appareils / ordinateurs d'un hôte virtuel Mamp Pro. La seule limitation est que vous ne pouvez tester qu'un seul domaine à la fois, mais pour moi, cela me convient lorsque je développe. Il est cependant très simple de passer d'un hôte virtuel à l'autre directement dans mamp.

Im courant mamp pro 2, lion de montagne. Le dossier Mes sites contient les dossiers de domaine individuels.

J'ai trouvé que si vous choisissez l'ip spécifique de l'ordinateur local sous l'hôte virtuel 'ip / port' et redémarrez mamp, ce domaine deviendra le domaine par défaut lors de la visualisation de l'adresse IP ou du nom de l'ordinateur des ordinateurs locaux sur le réseau.

À des fins de test, cela fonctionne très bien sur tous les appareils du réseau, y compris l'iPad. Si vous souhaitez tester un autre hôte virtuel, vous pouvez simplement renvoyer la configuration ip / port à "*", puis réaffecter un autre domaine à l'adresse IP de l'ordinateur et redémarrer.

L'avantage de cette approche simple est que vous pouvez donner accès aux clients directement à vos sites de développement lorsque vous êtes sur le même réseau sans avoir à passer par aucune configuration sur leur machine.

J'espère que cela aidera tous ceux qui recherchent une solution simple.

Roborew
la source
1

Le serveur DNS interne est l'une des options mais c'était trop compliqué à mettre en œuvre. Nous avons essayé d'installer squid en tant que serveur proxy, mais cela n'a pas non plus fonctionné car il redirigeait l'URL vers un nouveau serveur et cette redirection était également visible sur l'URL du navigateur.

La chose qui a finalement fonctionné pour nous était d'installer Fiddler sur l'un des serveurs et d'utiliser ce serveur comme serveur proxy sur ipad. Fiddler a également une fonction pour mapper les sous-domaines à l'adresse IP, c'est-à-dire quelque chose de similaire à / etc / hosts.

Deepak Singhal
la source
1

Beau tutoriel pour le faire: http://egalo.com/2012/05/29/testing-mac-web-site-using-local-hostname-on-mobile-device/

Un autre moyen consiste à connecter l'iPad via un hotspot local à mon MAC OS X et à établir une redirection de port vers la VM de développement. Pour y parvenir, j'ai suivi les étapes suivantes:

  • sur MAC OS X, créez un lien WLAN-Hotspot comment faire
  • connectez l'iPAD au Hotspot-WLAN (sur iPAD >> Paramètres >> WLAN)
  • Ajoutez le ServerAlias ​​à la VM de développement locale (détails ci-dessous)
  • établir ssh-portforwarding
    ssh -NL <IP-of-hotspot-host>:<source-port>:<url-to-local-vm>:80 <user-to-vm>
  • Dans le navigateur iPAD, ouvrez la page avec l'adresse IP
    <IP-of-hotspot-host>:<source-port>

Où obtenir 'IP-of-hotspot-host':

Une fois le hotspot créé, il y a un point WLAN dans
les paramètres système MAC OS X >> Réseau >> WLAN

Ajout de ServerAlias:

Sur ma VM de développement (Apache2) dans /etc/apache2/sites-available/dkr.dev.local, j'ai dû ajouter ce qui suit:

<VirtualHost *: 80>  
    ...  
    ServerAlias ​​<IP-of-hotspot-host>  
    ...  
</VirtualHost>
Christian Waltjen
la source
1

Si vous avez exploré ceci, et quelques-uns des liens externes, vous trouverez probablement cette réponse:

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

Il s'agit d'un serveur DNS léger appelé dnsmasq. Super simple, très puissant et peut être utilisé en conjonction avec vos serveurs DNS internes ou externes.

Beaucoup plus facile que d'installer squid, de jouer avec Apache et d'autres techniques qui prendraient beaucoup de temps et risqueraient de mettre en danger «l'intégrité» des configurations, développer des environnements, tester des environnements, etc.

Cela vaut la peine d'être considéré.

J'ai adopté cela comme un outil régulier de développement et de réseautage normal.

Casquette Carlos
la source
1

L'utilisation d'un serveur DNS personnalisé sur PC peut résoudre ce problème. J'utilise et je travaille parfaitement.

Vérifiez https://technitium.com/dns/ pour télécharger le serveur DNS personnalisé. Qui est construit en utilisant la technologie .Net. Après avoir configuré cet outil, vous devez modifier le paramètre DNS sur personnalisé et définir l'IP de votre PC. Pour éviter de changer d'IP à chaque redémarrage du PC, utilisez une adresse IP statique sur le PC.

rishad2m8
la source
0

J'essaierais Relay Server (qui fait partie d'Afaria) qui peut rediriger le trafic mobile en fonction des profils.

Mise à jour: la réponse de tremoloqui semble moins problématique et beaucoup moins chère.

Tomdemuyt
la source
0

Les réponses ici sont correctes. Un peu plus de connaissances: cela ne fonctionnera pas avec l'épinglage de certificat. Ce que vous pouvez faire, c'est soit (1) utiliser un certificat générique de domaine pour prendre en charge vos tests de région dev / test / qa. Et / ou (2) utilisez un serveur proxy inverse tel qu'Apache par lequel vous changez l'endroit où Apache achemine les requêtes au sein de votre réseau. Maintenant, lorsque vous vous lancez dans les tests d'épinglage SSL, vous êtes mort dans l'eau avec les appareils physiques et ne pouvez valider qu'avec un simulateur (ios) et un émulateur (Android).

codelapper
la source