Как я могу перенаправить HTTP-запросы, сделанные с iPad?

117

Поскольку на iPad мы не можем редактировать файл hosts (без взлома), как мы можем произвольно перенаправить веб-трафик на другой URL-адрес?

Это было бы важно для чего-то вроде разработки веб-сайта, использующего конфигурацию виртуального хоста, с которого вы хотите перенаправить на машину разработки.

(Это связано с вопросом: могу ли я редактировать хост-файл iPad? )

tremoloqui
источник

Ответы:

88

Способ обойти это ограничение iPad - использовать прокси-сервер HTTP, такой как Squid, работающий на другом компьютере, где вы можете редактировать файл hosts.

На iPad в разделе «Настройки» -> «Сеть» -> «Wi-Fi» -> (Ваша сеть) есть параметр HTTP-прокси, который можно установить вручную. Введите здесь информацию о прокси.

После настройки вы сможете манипулировать iPad, как если бы вы меняли файл hosts.

tremoloqui
источник
3
Для протокола я бы сказал, что установить squid с помощью macports довольно просто: «sudo port install squid»
MiQUEL
1
или yum install squidна fedora
Abhishek
3
или apt-get install squidна Ubuntu
Джесс Телфорд
3
Примечание: каждый раз, когда вы редактируете файл hosts на своем сервере Squid, перезапускайте службу Squid, чтобы изменения вступили в силу. В Ubuntu это sudo service squid3 reload. Кроме того - и, возможно, это проблема конфигурации, специфичная для моего сервера разработки - на моем iPad мне нужно вручную ввести http: //, чтобы разрешение адреса работало правильно.
Энди Гислер
1
Другой, более простой способ сделать это - использовать инструмент, который я написал: testProxy. Конфигурация не требуется: github.com/edwinm/testProxy
edwin
71

Я обнаружил, что вам просто нужно изменить настройки Wi-Fi на своем iPad, чтобы использовать IP-адрес вашего компьютера разработки в качестве прокси-сервера HTTP (как описано в вышеупомянутой статье ):

введите описание изображения здесь

Таким образом, достаточно иметь доступ к своему веб-приложению на iPad, введя URL-адрес виртуального хоста (например, local.mywebapp.com). Это легко и быстро, но, в отличие от решения Уилла Келлера, вы не сможете получить доступ в Интернет с iPad. Но в большинстве случаев это не проблема, поскольку вы просто хотите протестировать собственное приложение.

Stéphane
источник
1
Отличный ответ. Если вы тестируете приложение rails с помощью Webrick, просто установите IP-адрес своей машины разработчика и порт 3000
lsaffie
4
Если вы используете Wamp или uWamp в Windows, установите для порта значение 80.
Epoc,
10
Как насчет случаев, подобных моему, когда ваше локальное приложение извлекает данные из различных API в сети?
Джаред Эйтниер
28

Настройте файл hosts на компьютере, на котором запущен прокси-сервер, например Fiddler или Charles, и настройте iPad для использования этого компьютера в качестве прокси-сервера HTTP.

Вот инструкции, как это сделать с помощью Fiddler: http://conceptdev.blogspot.com/2009/01/monitoring-iphone-web-traffic-with.html

И это для Чарльза: http://www.ravelrumba.com/blog/ipad-http-debugging/

Саги
источник
Спасибо за подробное описание параметров Windows / Mac.
tremoloqui 02
2
Для нас, разработчиков Windows, Fiddler - отличный вариант, поскольку у большинства разработчиков он уже установлен.
Джош Муч
11

Если у вас уже есть сервер Apache, на котором вы занимаетесь разработкой, вы можете легко использовать его в качестве прямого прокси. Это особенно полезно для сайтов WordPress, которые действительно любят использовать полный абсолютный URL.

Пример Ubuntu ниже:

Первый шаг - отредактировать /etc/hostsфайл на вашем сервере разработки. Добавьте локальный IP-адрес сервера, указывающий на ваш сайт.

127.0.0.1 dev.mysite.com

Этот файл hosts будет использоваться вашим прокси-сервером Apache, когда он пытается разрешить запросы с вашего iPhone / iPad. Итак, давайте настроим часть Apache сейчас ...

Возможно, вам сначала потребуется установить некоторые модули.

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

Затем создайте файл виртуального хоста, например /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>

Включите vhost и перезапустите Apache:

sudo a2ensite my-proxy
sudo apache2ctl graceful

Затем перейдите в « Настройки»> «Wi-Fi»> «Ваша сеть» и настройте прокси-сервер «вручную». Введите IP-адрес вашего сервера Apache и порт. Это оно!

В <Proxy *>блок гарантирует , что только люди на моей локальной сети могут использовать этот прокси - сервер. Строгое ограничение доступа имеет важное значение, если вы используете прямой прокси. На этом этапе вам будет полезна страница ip2cidr . (В качестве дополнительной меры порт: 8080 заблокирован моим брандмауэром.)

Мануэль Раззари
источник
9

Мне нужно протестировать разрабатываемые мной веб-приложения на iPad. Я использую Apache на своем компьютере разработчика для запуска веб-приложений, поэтому самым простым решением, которое я нашел, было использование Apache mod_proxy.

Моя машина разработчика отображается в моей домашней сети как sapphire.local.

Веб-приложение, которое я тестирую, размещено на машине разработчика по адресу demo.cms.dev (я использую POW).

Чтобы настроить прокси, я добавил следующий раздел в 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>

Это направляет входящие запросы на sapphire.local на demo.cms.dev. Метод работает только для одного приложения за раз. Я думаю, вы могли бы использовать разные порты для установки дополнительных приложений. Может у кого есть решение получше?

Уилл Келер
источник
Это указывало мне в правильном направлении. Сначала я получил сообщение об ошибке «Для URL-адреса не действовал обработчик протокола». Я обнаружил, что мне нужно загрузить как proxy_module, так и proxy_http_module, чтобы заставить его работать. Спасибо!
Hobo
8

Также можно использовать приложение Weblock - AdBlock для iOS (доступно за 1,99 доллара здесь: https://itunes.apple.com/us/app/weblock/id558818638?mt=8 ) для создания перенаправления веб-трафика.

Это позволяет перенаправить любой трафик, соответствующий определенному правилу, на указанный IP-адрес. Это будет имитировать добавление записи в / etc / hosts на вашем устройстве iOS. Если имя хоста, заданное в запросах, обрабатывается IP-адресом, на который вы направляете свой трафик, вы можете использовать это для тестирования частного API или даже для прослушивания трафика, отправленного из других приложений или веб-сайтов. К сожалению, это работает только для соединений http / https.

Все это можно сделать только при подключении к Wi-Fi (одно из ограничений Weblock). Основным преимуществом является то, что вы можете легко настроить все со своего устройства iOS, и вам не нужно возиться с конфигурацией DNS / прокси-сервера.

Вот пример:

  1. Я настроил Weblock следующим образом: http://i.stack.imgur.com/c5SUh.png
  2. Открыл Safari и набрал www.google.com как URL
  3. Это вывод в терминале моего Mac, который прослушивает соединение через порт 1234:
    macbook-pro-tk: ~ kpr $ nc -l -v -v 1234
    ПОЛУЧИТЬ http://www.google.com/ HTTP / 1.1
    Хост: www.google.com
    Принять: text / html, application / xhtml + xml, application / xml; q = 0.9, * / *; q = 0.8
    Прокси-соединение: keep-alive
    PREF = J = 7722bc3c844a7c26: ТМ = 1402073839: LM = 1402073839: S = 5bSJJsM2p0HgUP7L
    Пользовательский агент: Mozilla / 5.0 (iPhone; CPU iPhone OS 7_1_1, например Mac OS X) AppleWebKit / 537.51.2 (KHTML, например Gecko) Версия / 7.0 Mobile / 11D201 Safari / 9537.53
    Accept-Language: en-us
    Принятие кодировки: gzip, deflate
    Подключение: keep-alive

Weblock также хорош для выборочного перенаправления некоторых URL-адресов с помощью регулярных выражений. Вы можете перенаправлять запросы только на определенную конечную точку, в то время как все остальные запросы отправляются на IP, возвращенный из DNS. На самом деле это позволяет настроить даже более подходящую конфигурацию, чем это делает / etc / hosts.

Пример: если я создам правило перенаправления URL-адреса для htt *: //somedomain.com/api/login* и некоторого IP- адреса и порта, я увижу только трафик с этого URL-адреса на этом IP-адресе и порту, а весь остальной трафик - на какой-либо домен. com перейдет непосредственно на IP, возвращаемый DNS. Обратите внимание, что это будет работать как для / api / login, так и для / api / login? Someparam = somevalue благодаря подстановочному знаку * в конце правила.

Копер
источник
Спасибо. Я только что купил это и собираюсь попробовать.
Деннис Дэй
6

Я сделал это с помощью squidman на Mac. Легко настроить и использовать.
Я настроил его за 5 минут, следуя этой статье .

Обновить

Другое дело, если вы хотите подключиться к веб-сайтам, работающим на прокси-сервере, в моем случае это мой Mac, вам нужно прокомментировать эту строку в squidman-> Preferences-> Template

# protect web apps running on the proxy host from external users
# http_access deny to_localhost
Лэй Цао
источник
5

Вы можете настроить внутренний DNS-сервер в своей сети (если он еще не существует) и настроить запись A. Затем убедитесь, что ваш DHCP настроен на возврат указанного DNS-сервера.

MASSPro
источник
3

Вы также можете использовать http://xip.io/, используя инструкции на этой странице, вы можете ввести IP-адрес, и он перенаправит вас на соответствующий локальный IP-адрес.

R Reveley
источник
2

Если у вас есть действующий веб-сайт, вы можете использовать для этого:

Вы можете добавить запись A в свою конфигурацию DNS: something.yourdomain.com, которая указывает на ваш локальный IP-адрес, а затем добавить запись для something.yourdomain.com в файл виртуальных хостов. Перезагрузите Apache, подключите устройство iOS к той же сети, и все готово.

Дэниел Пауэрс
источник
1

Здесь нет метода настройки для кросс-устройства / компьютерного тестирования виртуального хоста Mamp Pro. Единственное ограничение - вы можете тестировать только один домен за раз, но для меня это нормально, когда я разрабатываю. Однако переключаться между виртуальными хостами прямо в mamp очень просто.

Я бегаю mamp pro 2, горный лев. Папка «Мои сайты» содержит отдельные папки домена.

Я обнаружил, что если вы выберете конкретный IP-адрес локального компьютера под виртуальным хостом «ip / port» и перезапустите mamp, этот домен станет доменом по умолчанию при просмотре IP-адреса или имени компьютера локального хоста в сети.

В целях тестирования это отлично работает на всех устройствах в сети, включая iPad. Если вы хотите протестировать другой виртуальный хост, вы можете просто вернуть конфигурацию ip / port на «*», а затем переназначить другой домен для IP-адреса компьютера и перезапустить.

Преимущество этого простого подхода заключается в том, что вы можете предоставлять клиентам доступ непосредственно к вашим сайтам разработки, когда вы находитесь в одной сети, без необходимости выполнять какие-либо настройки на их компьютере.

Надеюсь, это поможет всем, кто ищет простое решение.

roborew
источник
1

Внутренний DNS-сервер - один из вариантов, но его было слишком сложно реализовать. Мы попытались установить squid в качестве прокси-сервера, но это также не сработало, потому что он перенаправлял URL-адрес на новый сервер, и это перенаправление также было замечено в URL-адресе браузера.

В конечном итоге у нас сработало установка Fiddler на один из серверов и использование этого сервера в качестве прокси-сервера на ipad. Fiddler также имеет функцию сопоставления субдоменов с IP-адресами, то есть что-то похожее на / etc / hosts.

Дипак Сингхал
источник
1

Хороший учебник для этого: http://egalo.com/2012/05/29/testing-mac-web-site-using-local-hostname-on-mobile-device/

Другой способ - подключить IPad через локальную точку доступа к моей MAC OS X и установить перенаправление портов на виртуальную машину разработки. Для этого я сделал следующие шаги:

  • в MAC OS X создайте ссылку WLAN-Hotspot, как это сделать
  • подключите iPAD к Hotspot-WLAN (на iPAD >> Настройки >> WLAN)
  • Добавьте ServerAlias ​​в локальную виртуальную машину разработки (подробности ниже)
  • установить ssh-portforwarding
    ssh -NL <IP-of-hotspot-host>:<source-port>:<url-to-local-vm>:80 <user-to-vm>
  • в браузере iPADs откройте страницу с IP
    <IP-of-hotspot-host>:<source-port>

Где взять «IP-адрес точки доступа»:

После создания точки доступа есть точка WLAN в
системных настройках MAC OS X >> Сеть >> WLAN.

Добавление ServerAlias:

На моей виртуальной машине разработки (Apache2) в /etc/apache2/sites-available/dkr.dev.local мне пришлось добавить следующее:

<VirtualHost *: 80>  
    ...  
    ServerAlias ​​<IP-of-hotspot-host>  
    ...  
</ VirtualHost>
Кристиан Вальтьен
источник
1

Если вы изучали это и несколько внешних ссылок, вы, возможно, найдете этот ответ:

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

Речь идет о легковесном DNS-сервере под названием dnsmasq. Супер простой, очень мощный и может использоваться вместе с вашими внутренними или внешними DNS-серверами.

Намного проще, чем установить squid, возиться с Apache и другие методы, которые потребуют много времени и рискуют «целостностью» конфигураций, разработки сред, сред тестирования и т. Д.

Стоит задуматься.

Я принял это как обычный инструмент для разработки и нормального сетевого взаимодействия.

Карлос Кэп
источник
1

Решить эту проблему можно с помощью специального DNS-сервера на ПК. Пользуюсь и отлично работаю.

Посетите https://technitium.com/dns/, чтобы загрузить собственный DNS-сервер. Которая построена с использованием технологии .Net. После настройки этого инструмента вам необходимо изменить настройку DNS на пользовательский и установить IP-адрес вашего ПК. Чтобы не менять IP каждый раз при перезагрузке ПК, используйте статический IP на ПК.

rishad2m8
источник
0

Я бы попробовал Relay Server (часть Afaria), который может перенаправлять мобильный трафик на основе профилей.

Обновление: ответ tremoloqui кажется меньше хлопот и намного дешевле.

tomdemuyt
источник
0

Ответы здесь правильные. Еще немного знаний: они не будут работать с закреплением сертификатов. Что вы можете сделать, так это (1) использовать сертификат подстановочного знака домена для поддержки вашего тестирования региона dev / test / qa. И / или (2) использовать обратный прокси-сервер, такой как Apache, с помощью которого вы переходите к тому, куда Apache направляет запросы в вашей сети. Теперь, когда вы попадаете в тестирование SSL-пиннинга, вы мертвец в воде с физическими устройствами и можете проверить только с помощью симулятора (ios) и эмулятора (Android).

codeslapper
источник