How can I redirect HTTP requests made from an iPad?

既然在 iPad 上我们不能编辑主机文件(没有越狱) ,我们怎么能任意重定向网络流量到另一个网址?

这对于开发使用 Virtual Host 配置的网站来说非常重要,因为您希望在该网站中重定向到开发计算机。

(这与这个问题有关: 我可以编辑 iPad 的主机文件吗?)

99853 次浏览

绕过 iPad 这个限制的方法是使用 HTTP 代理服务器,比如在另一台机器上运行的 乌贼,在那里您可以编辑主机文件。

在 iPad 上设置-> 网络-> Wi-Fi-> (你的网络)有一个 HTTP 代理设置,可以设置为手动。在此输入您的代理信息。

一旦设置好,你就可以操作 iPad 了,就好像你在更改主机文件一样。

我会尝试 Relay Server (Afaria 的一部分) ,它可以根据配置文件重定向移动流量。

更新: tremoloqui 的答案似乎更少的麻烦和便宜得多。

在运行代理服务器(如 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/

您可以在您的网络上设置一个内部 DNS 服务器(如果还没有的话)并设置一个 A 记录。然后确保您的 DHCP 设置为返回所述 DNS 服务器

I need to test web apps I am developing on an iPad. I use Apache on my dev machine to run the web apps, so the easiest solution I found was to use Apache mod_proxy.

我的开发人员机器在我的家庭网络上是可见的,作为 saphire.local。

我正在测试的 Web 应用程序位于 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>

这会将在 saphire.local 上传入的请求路由到 demo.cms.dev。该方法一次只适用于一个应用程序。我认为你可以使用不同的端口设置额外的应用程序。也许有人有更好的解决办法?

我发现你的 iPad 中的 你只需要修改 Wifi 设置使用你的开发机器的 IP 地址作为 HTTP 代理,还有将开发机器配置为一个代理(正如在 上述文章中解释的那样) :

enter image description here

这样,通过输入虚拟主机的网址(例如 local.mywebapp.com)就可以访问 iPad 上的 web 应用程序。它简单快捷,但不同于 Will Koehler 的解决方案,你将无法从 iPad 上访问互联网。但是大多数情况下这并不是一个问题,因为您只是想测试自己的应用程序。

这里是一个没有配置的方法交叉设备/计算机测试的 Mamp Pro 虚拟主机。唯一的限制是您一次只能测试一个域,但是对于我来说,在我开发的时候这是很好的。然而,在 mamp 中直接在虚拟主机之间切换非常简单。

我运行 mamp 亲2,山狮。我的网站文件夹包含个人域文件夹。

我发现,如果你在虚拟主机“ ip/port”下选择本地计算机的特定 ip,并重新启动 mamp,当你在网络上查看本地主机的 ip 地址或计算机名时,这个域将成为默认域。

For testing purposes this works great across all devices on the network, including the iPad. If you want to test another virtual host you can simply return the ip/port config to "*" and then reassign another domain to the computers ip address and restart.

这种简单方法的优点是,当您在同一网络上时,您可以直接向客户端提供对开发站点的访问,而不必在他们的机器上进行任何配置。

希望这对其他寻找简单解决方案的人有所帮助。

If you have a live website you can use for this:

你可以在你的 DNS 配置中添加一个 a 记录: something.yourdomain.com 指向你的本地 IP 地址,然后在你的虚拟主机文件中添加一个 something.yourdomain.com。重启 Apache,把你的 iOS 设备放在同一个网络上,你就可以开始了。

内部 DNS 服务器是其中一个选项,但是实现起来太麻烦了。我们尝试安装 squid 作为代理服务器,但这也不起作用,因为它正在将 URL 重定向到新的服务器,这个重定向在浏览器 URL 上也可以看到。

Thing which finally worked for us was to install Fiddler on one of the server and use this server as the proxy server on ipad. Fiddler also has a feature to map sub-domains to IP address i.e. something similar to /etc/hosts.

如果你已经有了一个 阿帕奇人服务器,你正在做开发,你可以很容易地使用它作为一个转发代理。这对于那些喜欢使用完全绝对 URL 的 WordPress 网站来说尤其有用。

Ubuntu 示例如下:

第一步是在开发服务器中编辑 /etc/hosts文件。添加服务器的本地 IP,指向您的站点。

127.0.0.1 dev.mysite.com

当 Apache 代理试图解析来自 iPhone/iPad 的请求时,它将使用这个主机文件。现在我们来设置阿帕奇部分。

您可能需要先安装一些模块。

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

然后转到 Settings > Wi-Fi > Your Network并配置一个“手动”代理。输入 Apache 服务器的 IP 和端口。就是这样!

<Proxy *>块确保只有本地网络上的人才能使用这个代理。如果使用转发代理,则严格限制访问 是必不可少的。此时,ip2cidr页面将很有帮助。(作为额外措施,: 8080端口被我的防火墙屏蔽了。)

您也可以使用 http://xip.io/使用该页面上的说明,您可以输入 ip 地址,它将重定向到相关的本地 ip。

I made it by using 鱿鱼人 on Mac. It's easy to set up and use.
我按照 这篇文章在5分钟内设置好。

Update

另一件事是,如果你想连接到代理服务器上运行的网站,在我的案例中是我的 Mac,你需要在鱿鱼人-> 首选项-> 模板中注释这一行

# protect web apps running on the proxy host from external users
# http_access deny to_localhost

Nice tutorial to do so: Http://egalo.com/2012/05/29/testing-mac-web-site-using-local-hostname-on-mobile-device/

另一种方法是通过 Local Hotspot 连接 IPad 和我的 MAC OS X,并建立一个到开发 VM 的转发端口。 为了达到这个目的,我已经完成了以下步骤:

  • 在 MAC OS X 上创建一个 WLAN-Hotspot Link how to do this
  • 用 Hotspot-WLAN 连接 iPAD (在 iPAD > > Settings > > WLAN 上)
  • 将 ServerAlias 添加到本地开发 VM (详细信息见下文)
  • 建立 ssh-portforward
    ssh -NL <IP-of-hotspot-host>:<source-port>:<url-to-local-vm>:80 <user-to-vm>
  • Int iPad 浏览器用 IP 打开页面
    <IP-of-hotspot-host>:<source-port>

Where to get 'IP-of-hotspot-host':

创建热点后,有一个无线局域网点
MAC OS X 系统设置 > 网络 > 无线局域网

Adding the ServerAlias:

在我的开发中,< strong >/etc/Apache2/sites- 可用/dkr.dev.local 中的 VM (Apache2) 我必须补充以下内容:

<VirtualHost *:80>
...
ServerAlias <IP-of-hotspot-host>
...
</VirtualHost>

也可以使用 Weblock-AdBlock for iOS 应用程序(此处售价1.99美元: https://itunes.apple.com/us/app/weblock/id558818638?mt=8)来创建网络流量重定向。

这允许您将任何匹配特定规则的流量重定向到指定的 IP 地址。这将模拟向 iOS 设备上的/etc/hosts 添加一个条目。如果请求中设置的主机名是由您的流量指向的 IP 处理的,您可以使用该 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
GET http://www.google.com/ HTTP/1.1
Host: www.google.com
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Proxy-Connection: keep-alive
PREF=ID=7722bc3c844a7c26:TM=1402073839:LM=1402073839:S=5bSJJsM2p0HgUP7L
User-Agent: Mozilla/5.0 (iPhone; CPU iPhone OS 7_1_1 like Mac OS X) AppleWebKit/537.51.2 (KHTML, like Gecko) Version/7.0 Mobile/11D201 Safari/9537.53
Accept-Language: en-us
Accept-Encoding: gzip, deflate
Connection: keep-alive


Weblock 还可以用正则表达式有选择地重定向一些 URL。 您可以只将查询重定向到某个端点,而所有其他查询都转到从 DNS 返回的 IP。这实际上允许进行比/etc/hosts 更合适的配置。

例如: 如果我为 Htt * :// somedomain.com/api/login* 和一些 IP 和端口创建一个 URL 重定向规则,我将只在这个 IP 和端口看到来自这个 URL 的流量,而所有其他流量到 somdomain.com 将直接到 DNS 返回的 IP。注意,由于规则末尾的通配符 * ,它将同时适用于 /api/login/api/login

如果你一直在探索这个问题,以及一些外部链接,你可能会找到这个答案:

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

它是关于一个称为 dnsmasq 的轻量级 DNS 服务器。超级简单,非常强大,可以与您的内部或外部 DNS 服务器结合使用。

这比安装 squid、摆弄 Apache 以及其他耗时的技术要容易得多,而且还要冒配置、开发环境、测试环境等的“完整性”风险。

值得考虑。

我采用它作为开发和正常网络的常规工具。

这里的答案是正确的。更多的知识: 这些不适用于证书固定。您可以做的是(1)使用域通配符 cert 来支持 dev/test/qa 区域测试。和/或(2)使用反向代理服务器,例如 Apache,通过它可以更改 Apache 路由网络中的请求的位置。现在,当您进入 SSL Pining 测试时,您将与物理设备一起死在水中,并且只能通过模拟器(ios)和模拟器(android)进行验证。

在 PC 机上使用定制的 DNS 服务器可以解决这个问题。

选中 https://technitium.com/dns/下载自定义 DNS 服务器。它是用。网络技术。配置此工具后,您需要更改 DNS 设置为自定义和设置您的 PC 的 IP。为了避免每次重新启动 PC 时都更改 IP,请在 PC 上使用静态 IP。

简介:

将请求重定向到内部开发站点而不对任何特定设备的主机文件进行调整的一种简单的 而且要快方法是在路由器中创建一个 < strong > name: IP 映射,以绕过公共 DNS。

这个解决方案经过测试,并且已知可以产生一致的、正确的结果。它避免了所有开发人员在自己的机器上进行本地黑客攻击。

过程:

这个例子使用一个运行 路由器操作系统 的 MikroTik 路由器,所以如果使用其他的东西,那么您必须根据您的路由器菜单的组织方式来调整这个过程。

  1. 在路由器上为您的开发站点创建一个 name:IP映射。首先转到 DNS部分,然后单击 Static:

RouterOS DNS Main Menu

  1. 然后单击 > Add New:

DNS Add New Entry

  1. Now create a DNS entry for your Dev site similar to below:

Local Mapping

  1. 最后,设置默认网关为 首先 DNS 解析程序为您的开发人员,使其绕过公共 DNS 记录为您的网站:

Set GW to be 1st DNS Resolver

The DNS servers will be interrogated in sequential order, so it's important that the local mapping is referenced before the mapping published publicly in your DNS for your 生产 website that Google knows about.

结论:

现在,当你试图在 iPad、 iPhone 或其他设备上连接到开发者的子网时,你会被重定向到 DEV网站。不需要对这些设备中的任何 hosts文件进行更改来执行您的测试和评审。

无论如何,这就是一个网络人如何解决这个问题。