¿Cómo puedo redirigir las solicitudes HTTP realizadas desde un iPad?

116

Dado que en un iPad no podemos editar el archivo de hosts (sin jailbreak), ¿cómo podemos redirigir arbitrariamente el tráfico web a otra URL?

Esto sería importante para algo como el desarrollo de un sitio web que utiliza una configuración de host virtual donde desea redirigir a una máquina de desarrollo.

(Esto está relacionado con esta pregunta: ¿Puedo editar el archivo de host de un iPad? )

tremoloqui
fuente

Respuestas:

88

La forma de sortear esta limitación del iPad es utilizar un servidor proxy HTTP, como Squid, que se ejecuta en otra máquina, donde puede editar el archivo de hosts.

En el iPad, en Configuración -> Red -> Wi-Fi -> (Su red) Hay una configuración de proxy HTTP que se puede configurar en manual. Ingrese su información de proxy aquí.

Una vez que esto esté configurado, podrá manipular el iPad como si estuviera cambiando el archivo de hosts.

tremoloqui
fuente
3
Solo para que conste, diría que es bastante fácil instalar squid usando macports "sudo port install squid"
MiQUEL
1
o yum install squiden fedora
Abhishek
3
o apt-get install squiden Ubuntu
Jess Telford
3
Nota: cada vez que edite el archivo de hosts en su servidor Squid, reinicie el servicio Squid para asegurarse de que las ediciones surtan efecto. En Ubuntu eso es sudo service squid3 reload. Además, y tal vez este sea un problema de configuración específico de mi servidor de desarrollo, en mi iPad tengo que ingresar manualmente http: // para que la resolución de direcciones funcione correctamente.
Andy Giesler
1
Otra forma más fácil de hacer esto es con una herramienta que escribí: testProxy. No se necesita configuración: github.com/edwinm/testProxy
edwin
71

Descubrí que solo tiene que modificar la configuración de Wifi en su iPad para usar la dirección IP de su máquina de desarrollo como un proxy HTTP (como se explica en el artículo mencionado anteriormente ):

ingrese la descripción de la imagen aquí

De esa manera, es suficiente poder acceder a su aplicación web en su iPad ingresando la URL del host virtual (por ejemplo local.mywebapp.com). Es fácil y rápido, pero a diferencia de la solución de Will Koehler, no podrá acceder a Internet desde el iPad. Pero la mayoría de las veces no es realmente un problema, ya que solo desea probar su propia aplicación.

Stéphane
fuente
1
Gran respuesta. Si está probando una aplicación de rieles con Webrick, simplemente configure la dirección IP de su máquina de desarrollo y el puerto 3000
lsaffie
4
Si está utilizando Wamp o uWamp en Windows, configure el puerto en 80.
Epoc
10
¿Qué pasa con casos como el mío donde su aplicación local extrae datos de varias API en la red?
Jared Eitnier
28

Configure el archivo de hosts en una computadora que ejecute un servidor proxy como Fiddler o Charles, y configure el iPad para usar esa computadora como un proxy HTTP.

Aquí hay instrucciones sobre cómo hacer esto con Fiddler: http://conceptdev.blogspot.com/2009/01/monitoring-iphone-web-traffic-with.html

Y esto es para Charles: http://www.ravelrumba.com/blog/ipad-http-debugging/

sagi
fuente
Gracias por desarrollar las opciones de Windows / Mac.
tremoloqui
2
Para nosotros, los desarrolladores de Windows, Fiddler es una gran opción, ya que la mayoría de los desarrolladores ya lo tienen instalado.
Josh Mouch
11

Si ya tiene un servidor Apache en el que está desarrollando, puede usarlo fácilmente como un proxy de reenvío. Esto es particularmente útil para los sitios de WordPress, a los que realmente les encanta usar la URL absoluta completa.

Ejemplo de Ubuntu a continuación:

El primer paso es editar el /etc/hostsarchivo en su servidor de desarrollo. Agregue la IP local del servidor, apuntando a su sitio.

127.0.0.1 dev.mysite.com

Este archivo de hosts será utilizado por su proxy Apache cuando intente resolver las solicitudes de su iPhone / iPad. Así que configuremos la parte de Apache ahora ...

Es posible que primero deba instalar algunos módulos.

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

Luego cree un archivo de host virtual, por ejemplo /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>

Habilite el vhost y reinicie Apache:

sudo a2ensite my-proxy
sudo apache2ctl graceful

Luego, vaya a Configuración> Wi-Fi> Su red y configure un proxy "Manual". Ingrese la IP de su servidor Apache y el puerto. ¡Eso es!

El <Proxy *>bloqueo garantiza que solo las personas de mi red local puedan usar este proxy. Limitar estrictamente el acceso es esencial si está utilizando un proxy de reenvío. La página ip2cidr será útil en este momento. (Como medida adicional, el puerto: 8080 está bloqueado por mi firewall).

Manuel Razzari
fuente
9

Necesito probar las aplicaciones web que estoy desarrollando en un iPad. Utilizo Apache en mi máquina de desarrollo para ejecutar las aplicaciones web, por lo que la solución más fácil que encontré fue usar Apache mod_proxy.

Mi máquina de desarrollo es visible en mi red doméstica como sapphire.local.

La aplicación web que estoy probando está alojada en la máquina de desarrollo en demo.cms.dev (estoy usando POW).

Para configurar el proxy, agregué la siguiente sección a 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>

Esto enruta las solicitudes entrantes en sapphire.local a demo.cms.dev. El método solo funciona para una aplicación a la vez. Creo que podrías usar diferentes puertos para configurar aplicaciones adicionales. ¿Quizás alguien tiene una mejor solución?

Will Koehler
fuente
Esto me indicó la dirección correcta. Inicialmente, recibí un mensaje de error "Ningún controlador de protocolo era válido para la URL". Descubrí que tenía que cargar proxy_module y proxy_http_module para que funcionara. ¡Gracias!
Hobo
8

También es posible usar Weblock - AdBlock para la aplicación iOS (disponible por $ 1.99 aquí: https://itunes.apple.com/us/app/weblock/id558818638?mt=8 ) para crear redireccionamientos de tráfico web.

Esto le permite redirigir cualquier tráfico que coincida con cierta regla a una dirección IP especificada. Esto emulará la adición de una entrada a / etc / hosts en su dispositivo iOS. Si el nombre de host configurado en las solicitudes lo maneja la IP a la que dirige su tráfico, puede usar esto para probar la API privada o incluso rastrear el tráfico enviado desde otras aplicaciones o sitios web. Desafortunadamente, esto solo funciona para conexiones http / https.

Todo esto se puede hacer solo con Wi-Fi (una de las limitaciones de Weblock). Su principal ventaja es que puede configurar fácilmente todo desde su dispositivo iOS y no hay necesidad de meterse con la configuración del servidor DNS / proxy.

He aquí un ejemplo:

  1. He configurado Weblock así: http://i.stack.imgur.com/c5SUh.png
  2. Abrió Safari y escribió www.google.com como URL
  3. Esta es la salida en el terminal de mi Mac escuchando la conexión en el puerto 1234:
    macbook-pro-tk: ~ kpr $ nc -l -v -v 1234
    OBTENGA http://www.google.com/ HTTP / 1.1
    Anfitrión: www.google.com
    Aceptar: texto / html, aplicación / xhtml + xml, aplicación / xml; q = 0.9, * / *; q = 0.8
    Conexión proxy: mantener vivo
    PREF = ID = 7722bc3c844a7c26: TM = 1402073839: LM = 1402073839: S = 5bSJJsM2p0HgUP7L
    Usuario-Agente: Mozilla / 5.0 (iPhone; CPU iPhone OS 7_1_1 como Mac OS X) AppleWebKit / 537.51.2 (KHTML, como Gecko) Versión / 7.0 Mobile / 11D201 Safari / 9537.53
    Aceptar-Idioma: en-us
    Aceptar codificación: gzip, desinflar
    Conexión: mantener vivo

Weblock también es bueno para redirigir selectivamente algunas URL con expresiones regulares. Puede redirigir las consultas solo a ciertos puntos finales, mientras que todas las demás consultas van a la IP devuelta por el DNS. En realidad, esto permite una configuración aún más adecuada que / etc / hosts.

Ejemplo: si creo una regla de redireccionamiento de URL para htt *: //somedomain.com/api/login* y alguna IP y puerto, solo veré el tráfico de esta URL en esta IP y puerto, mientras que el resto del tráfico a algún dominio. com irá directamente a la IP devuelta por el DNS. Tenga en cuenta que funcionará tanto para / api / login como para / api / login? Someparam = somevalue gracias al signo comodín * al final de la regla.

Koper
fuente
Gracias. Acabo de comprar esto y lo voy a probar.
Dennis Day
6

Lo hice usando squidman en Mac. Es fácil de configurar y usar.
Lo configuré en 5 minutos siguiendo este artículo .

Actualizar

Otra cosa es que si desea conectarse a los sitios web que se ejecutan en el servidor proxy, en mi caso es mi Mac, debe comentar esta línea en squidman-> Preferencias-> Plantilla

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

Puede configurar un servidor DNS interno en su red (si aún no existe uno) y configurar un registro A. Luego, asegúrese de que su DHCP esté configurado para devolver dicho servidor DNS

MASSPro
fuente
3

También puede usar http://xip.io/ usando las instrucciones en esa página, puede ingresar la dirección IP y lo redireccionará a la IP local correspondiente.

R Reveley
fuente
2

Si tiene un sitio web en vivo, puede usarlo para esto:

Puede agregar un registro A a su configuración de DNS: something.yourdomain.com que apunta a su dirección IP local, luego agregue una entrada para something.yourdomain.com a su archivo de hosts virtuales. Reinicie Apache, coloque su dispositivo iOS en la misma red y listo.

Daniel Powers
fuente
1

Este es un método sin configuración para pruebas entre dispositivos / computadoras de un host virtual Mamp Pro. La única limitación es que solo puede probar un dominio a la vez, pero para mí esto está bien cuando estoy desarrollando. Sin embargo, es realmente sencillo cambiar entre hosts virtuales directamente en mamp.

Estoy corriendo mamp pro 2, puma. La carpeta Mis sitios contiene las carpetas de dominio individuales.

Descubrí que si elige la IP específica de la computadora local en el host virtual 'ip / puerto' y reinicia mamp, este dominio se convertirá en el dominio predeterminado al ver la dirección IP de las computadoras localhost o el nombre de la computadora en la red.

Para fines de prueba, esto funciona muy bien en todos los dispositivos de la red, incluido el iPad. Si desea probar otro host virtual, simplemente puede devolver la configuración de ip / puerto a "*" y luego reasignar otro dominio a la dirección IP de la computadora y reiniciar.

La ventaja de este enfoque simple es que puede proporcionar acceso a los clientes directamente a sus sitios de desarrollo cuando está en la misma red sin tener que pasar por ninguna configuración en su máquina.

Espero que esto ayude a cualquiera que busque una solución simple.

roborew
fuente
1

El servidor DNS interno es una de las opciones, pero fue demasiado complicado de implementar. Intentamos instalar squid como servidor proxy, pero tampoco funcionó porque redirigía la URL a un nuevo servidor y esta redirección también se vio en la URL del navegador.

Lo que finalmente funcionó para nosotros fue instalar Fiddler en uno de los servidores y usar este servidor como servidor proxy en el ipad. Fiddler también tiene una función para asignar subdominios a la dirección IP, es decir, algo similar a / etc / hosts.

Deepak Singhal
fuente
1

Buen tutorial para hacerlo: http://egalo.com/2012/05/29/testing-mac-web-site-using-local-hostname-on-mobile-device/

Otra forma es conectar el iPad a través de Local Hotspot con mi MAC OS X y establecer un reenvío de puertos a la VM de desarrollo. Para lograr esto, he realizado los siguientes pasos:

  • en MAC OS X cree un enlace WLAN-Hotspot cómo hacer esto
  • conecte el iPAD con el Hotspot-WLAN (en iPAD >> Configuración >> WLAN)
  • Agregue ServerAlias ​​a la VM de desarrollo local (detalles a continuación)
  • establecer el reenvío de puertos ssh
    ssh -NL <IP-of-hotspot-host>:<source-port>:<url-to-local-vm>:80 <user-to-vm>
  • int el navegador iPADs abre la página con la IP
    <IP-of-hotspot-host>:<source-port>

Dónde obtener 'IP-of-hotspot-host':

Una vez creado el punto de acceso, hay un punto WLAN en
la configuración del sistema MAC OS X >> Red >> WLAN

Añadiendo ServerAlias:

En mi desarrollo-VM (Apache2) en /etc/apache2/sites-available/dkr.dev.local tuve que agregar lo siguiente:

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

Si ha estado explorando esto y algunos de los enlaces externos, posiblemente encuentre esta respuesta:

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

Se trata de un servidor DNS de peso ligero llamado dnsmasq. Súper simple, muy poderoso y se puede usar junto con sus servidores DNS internos o externos.

Mucho más fácil que instalar squid, jugar con Apache y otras técnicas que llevarían mucho tiempo y pondrían en riesgo la "integridad" de las configuraciones, los entornos de desarrollo, los entornos de prueba, etc.

Vale la pena considerarlo.

Lo adopté como una herramienta habitual para el desarrollo y para la creación de redes normales.

Carlos Cap
fuente
1

El uso de un servidor DNS personalizado en la PC puede resolver esto. Estoy usando y funcionando perfectamente.

Consulte https://technitium.com/dns/ para descargar el servidor DNS personalizado. Que está construido usando tecnología .Net. Después de configurar esta herramienta, debe cambiar la configuración de DNS a personalizada y configurar la IP de su PC. Para evitar cambiar la IP cada vez que reinicia la PC, use una IP estática en la PC.

rishad2m8
fuente
0

Probaría Relay Server (parte de Afaria) que puede redirigir el tráfico móvil en función de los perfiles.

Actualización: la respuesta de tremoloqui parece menos problemática y mucho más barata.

tomdemuyt
fuente
0

Las respuestas aquí son correctas. Un poco más de conocimiento: estos no funcionarán con la fijación de certificados. Lo que puede hacer es (1) usar un certificado comodín de dominio para respaldar sus pruebas de región dev / test / qa. Y / o (2) utilice un servidor proxy inverso como Apache mediante el cual cambie a donde Apache enruta las solicitudes dentro de su red. Ahora, cuando ingresa a las pruebas de fijación de SSL, está muerto en el agua con los dispositivos físicos y solo puede validar con el simulador (ios) y el emulador (android).

codigo
fuente