Windows 8 Metro Apps使用Proxifier的方法

在校园里,经常要使用代理上网的方式,Proxifier可以让不支持通过代理服务器的软件能通过HTTPS或SOCKS代理或代理链,俗称“透明代理”,支持Xp,Vista,Windows 7操作系统。虽然Proxifier在Windows 8下可以正常安装,但是使用却不是十全十美的,所有桌面程序都可以正常通过Proxifier实现代理上网,但是在Metro界面下,所有Metro应用却完全不经过Proxifier的透明代理,并且导致所有Metro无法连接互联网(即使不打开Proxifier)。难道是不兼容?显然不是,毕竟桌面程序没问题。

经过上网搜索发现,找到了一篇博文"How to use Proxifier for Windows 8 MetroStyle apps"讲解了如何让Metro应用可以使用Proxifier,同时也引用了一篇MSDN上的博文Revisiting Fiddler and Windows 8 Metro-style applications",提到了为什么Metro Apps运行的特殊性,摘录重点部分如下:

Metro-style applications run inside isolated processes known as “AppContainers,” and by default, AppContainers are forbidden from sending network traffic to the local computer (loopback)

由此可知,Metro Apps是运行在被隔离的AppContainers环境中,该环境阻止了网络流量发送到本机,即Loopback。从而,像Fiddler这样著名的抓包工具也没法抓取Metro Apps的HTTP请求等记录。

为了让Fiddler能够抓包(在开发时方便调试Metro程序),MSDN那篇博文上给出了新版本的Fiddler,里面包含了一个EnableLoopback Utility的工具,可以Exempt(豁免)部分或全部Metro应用,从而让Metro应用能够Loopback,当然也就能使用Proxifier了。OK,下面给出具体的方法。

1、从这里这里下载最新版的Fiddler并安装

2、打开Fiddler,点击"Win8 Config"或者Tools->Win8 Loopback Exemptions,这时会弹出一个新窗口"AppContainer Loopback Exemption Utility",如果你要将所有Metro Apps都使用Proxifier,点击"Exempt All",然后点击"Save Changes"

3、运行Proxifier,并设置规则让Fiddler进程通过透明代理

这样,所有Metro Apps的HTTP请求都经过Fiddler并且使用Proxifier的透明代理了

下图就是运行商店应用(Store)后Fiddler里HTTP请求的记录,是不是很爽?该方法唯一的麻烦之处是需要一直运行Fiddler,当然你可以将Fiddler设为开机启动,或者Ctrl+M将其最小化到system tray

留言 12

  1. 1b1t
    Thank you for sharing the link to my blog. I appreciate it.
    1. shinichi_wtn
      Thanks for your tutorial on this topic, it works like a charm :-)
  2. Hoary
    So many English words..... 终于解决了我一边用proxifier,一边win8的metro都不能联网的问题。。。 之前我自己写了个AppContainer Loopback Exemption Utility类似的软件,挂sogou代理上store。 现在终于明白为啥metro不能联网了,原来是proxifier的事情。。。 我最终的方案是使用ccproxy架设一个本地服务器,挂ie代理到本地,这样metro就可以上网了,fiddler对我用处不大,删掉了~ P.S.你也是北大的啊~
    1. shinichi_wtn
      呵呵,是啊~我平时经常使用Proxifier,但是装上Proxifier后所有的Metro程序就无法联网了,才在网上寻找解决方案的,然后就顺便了解了下Metro Apps的运行方式。
  3. chen_wenya
    谢谢
  4. chen_wenya
    但是我的metro应用还是联不上网,怎么回事呢?只有ie可以上...求解
    1. shinichi_wtn
      运行Metro程序后,你看下Fiddler窗口里是否有新的HTTP请求,如果有的话说明该Metro应用正经过Fiddler中转请求,同时看下Proxifier里面是否有Fiddler程序正在经过其代理。如果都没问题,可能是你的代理连不上Metro应用需要访问的网址。
  5. EdiTurn
    主要问题是安装了 Proxifier 之后所有 Modern UI 程序不能联网吧?如果仅需解决这个问题,我觉得使用 Proxifier Portable Edition 是一个更简便的办法。 按照上文所述方法,仍有一些程序(如 QQ)无法联网,而且我这里应用商店第一次可联网,之后就不行了。
    1. shinichi_wtn
      主要问题是学校的网只能访问教育网,必须要走代理才能使用许多内置的Metro应用。Metro QQ没用过,不知道情况,Store我这里是可以用的。回头可以试下Proxifier Portable Edition,你的意思是这个不会造成Metro Apps不能联网,但是Metro Apps还是不能走代理对吧。
  6. mirari
    这样感觉不对劲啊,fiddler装了以后必须要给Internet选项的连接里设置代理才能工作,这时候再给proxifer上设置fiddler的规则的话,WINInet的设置是全局的,所有应用程序的连接都会先通过fiddler,再通过proxifer走代理,这样的话从一开始直接在Internet选项里设置一下代理不就好了吗?但这样一来proxifer规则代理的意义就失去了啊
    1. shinichi_wtn
      用Proxifier是为了实现透明代理,如果只在Internet选项里设置代理,而代理又需要验证信息的话,很多软件是无法正常连接网络的。
  7. shiningelf
    我今天也是突然发现Metro不能上网了,网上搜了半天都不得要领,就想到会不会是proxifer导致的,卸载了果然好了。找到你这儿以后连原理也明白了,谢谢!