使用Privoxy做智能代理切换

You take the blue pill, the story ends, you wake up in your bed, and believe whatever you want to believe.

You take the red pill, you stay in Wonderland, and I show you just how deep the rabbit hole goes.

– 《黑客帝国》

如果你不知道什么是“墙”,那么应该祝福你继续活在美丽的Matrix里。但如果你选择服用红色药丸,那么在享受了墙外的信息流畅之后,你就再也无法忍受墙内的世界了。

GoAgent

GoAgent是一个基于Google App Engine的翻墙工具。关于GoAgent的安装教程,网络上已经有很多了,大家可以随便搜索一下就可以找到,当然,记得用google搜索。

SwitchySharp

拿GoAgent直接作代理服务器地址不太合适,因为如果全部走代理的话,国内的访问太慢了,所以我们需要给Chrome浏览器配置SwitchySharp插件,SwitchySharp插件加上自动更新的“墙”List(地址见下图),我们就可以在浏览器中享受无墙的世界了。

Privoxy

因为虽然SwitchySharp搞定了访问网页时的代理智能切换,但是我们在使用诸如Dropbox, twitter客户端等软件时,还是无法智能切换到代理。而使用Privoxy就能解决这个问题。

Privoxy是一个智能代理切换软件,它的使用必须基于GoAgent或其它已部署好的代理服务。下面介绍如何安装和配置privoxy。

安装

使用brew就可以一键安装:

brew install privoxy

自动启动

设置好自动启动后,我们就不用管它了。方法如下:

切换到/Library/LaunchAgents目录,用sudo vim新建一个名为local.privoxy.plist的文件,文件内容如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>local.arcueid.privoxy</string>
<key>ProgramArguments</key>
<array>
<string>/usr/local/sbin/privoxy</string>
<string>--no-daemon</string>
<string>/usr/local/etc/privoxy/config</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>KeepAlive</key>
<true/>
<key>StandardErrorPath</key>
<string>/usr/local/Cellar/privoxy/3.0.19/sbin/privoxy.log</string>
<key>StandardOutPath</key>
<string>/usr/local/Cellar/privoxy/3.0.19/sbin/privoxy.log</string>
</dict>
</plist>

编辑完成后,执行如下命令,就可以把privoxy设置成开机自动启动了:

sudo launchctl load /Library/LaunchAgents/local.privoxy.plist

可以用如下2条命令验证privoxy已经启动了。一是用ps查看是否有privoxy进程,二是查看privoxy默认监听的8118端口是否已经打开。如下所示:

[tangqiao LaunchAgents]$ps aux  | grep privoxy
tangqiao 25641 0.3 0.0 2436516 492 s001 U+ 5:31下午 0:00.00 grep --color=auto privoxy
root 17984 0.0 0.2 2477764 17452 ?? Ss 10:13上午 0:50.28 /usr/local/Cellar/privoxy/3.0.19/sbin/privoxy --no-daemon /usr/local/etc/privoxy/config
[tangqiao LaunchAgents]$netstat -an | grep 8118
tcp4 0 0 127.0.0.1.8118 *.* LISTEN

配置

我们需要配置Provixy才能使用它。配置步骤如下:

一. 用vim打开privoxy的配置文件:vim /usr/local/etc/privoxy/config
在最后增加如下内容:

actionsfile wall.action

二. 在/usr/local/etc/privoxy/目录下新建一个名为 wall.action的文件,然后在上面添加如下内容:

{+forward-override{forward 0.0.0.0:8087}}
.google.com.hk
.facebook.com
.google.com
.fbcdn.net
.gstatic.com
.gmail.com
.twitter.com
.youtube.com

该内容第一行表示接下来的内容会智能走端口为8087的代理,后面每行一个地址。你可以随时将你想增加的内容添加进去。该配置文件的官方详细说明文档在这里

三. 打开mac的代理设置,将“Web代理”和”安全Web代理”都设置成127.0.0.1,端口为8118。如下图所示:

Tips

  1. 如果你的GoAgent监听在8087端口,而Privoxy监听在8118端口,那么到这一步,你就可以让你的所有应用正常翻墙了。
    需要注意的是SwitchySharp默认会忽略系统代理直接连接网络,你可能需要选择它的“使用系统代理设置”这一项,如下所示:

  2. 用浏览器访问 config.privoxy.org,即可用Web界面管理自己的provixy配置文件。不过,事先需要在config文件中启用Web管理功能,方法是编辑/usr/local/etc/privoxy/config 文件,将enable-edit-actions的值设置为1即可。

  3. 访问 http://config.privoxy.org/show-url-info 可以查询某一个特定的URL是否会走代理服务。我们可以随时在这儿查询,结合上面的第2步,将一些URL Pattern加入到代理列表文件 wall.action 中, 我们就可以方便地管理Privoxy。

  4. 证书是个麻烦事儿,由于GoAgent的证书是自己生成的而不是权威机构颁发的,所以需要把GoAgent的证书加到钥匙串访问的可信证书里面,如下图所示。另外GoAgent的默认带的证书因为是公开的,所以有潜在被中间人攻击的危险,所以更安全的做法是把默认的证书删掉再重启GoAgent,这样GoAgent就会重新另外生成一个证书了,再把这个新证书加到钥匙串访问中,会更安全一些。

参考文章

    1. http://venmos.com/blog/2012/09/20/mac-autossh-privoxy/

    2. http://y-zh.net/archives/77

使用Privoxy做智能代理切换的更多相关文章

  1. Flash 用FLASH遮罩效果做图片切换效果

    本教程是关于FLASH应用遮罩效果制作好看的图片切换效果.该教程选用FLASH遮罩中最简单的一种作为例子,当然你可以用自己的想象力来做出更多更好的图片动画.希望本教程能带你带来帮助. 让我们先看看效果 ...

  2. DATAGUARD在做SWITCHOVER切换时遇到问题总结

    1.主库在进行物理主备库角色转换的时候遇到ORA-01093错误 SQL> select switchover_status from v$database;   SWITCHOVER_STAT ...

  3. uniapp使用swiper组件做tab切换动态获取高度

    swiper对高度进行了限制,所以说通常做出了tab切换的效果但是内容经常被截取掉???? 所以我在前端做了一个动态获取高度的功能 选项卡标题也就是tab切换的效果 选项卡内容区域的高度自适应 因为进 ...

  4. 【原】react做tab切换的几种方式

    最近搞一个pc端的活动,搞了一个多月,甚烦,因为相比于pc端,更喜欢移动端多一点.因为移动端又能搞我的react了. 今天主要总结一下react当中tab切换的几种方式,因为tab切换基本上都会用到. ...

  5. Android Viewpager加Fragment做界面切换时数据消失的解决方式

    今天遇到多个Fragment切换,回来后页面空白的情况,找到这个博客方法设置了一下,就可以了 vpAdapter = new VpAdapter(getSupportFragmentManager() ...

  6. VueJS 使用i18n做国际化切换中英文

    1.安装 npm install vue-i18n --save 2.创建存放语言包和i18n入口文件 a.在src下创建i18n目录 b.在src/i18n/创建i18n.js  (入口) c.在s ...

  7. vue做nav切换

    话不多说,直接上代码. 关键:通过点击来改变thisindex ,又thisinde == index来控制class是否含active来控制样式 简单效果如下:

  8. MySQL基于域名做高可用切换(Consul初试)

    一,Consul功能介绍 服务发现 - Consul的客户端可用提供一个服务,比如 api 或者mysql ,另外一些客户端可用使用Consul去发现一个指定服务的提供者.通过DNS或者HTTP应用程 ...

  9. 在做爬虫或者自动化测试时新打开一个新标签页,必须使用windows切换

    在做爬虫或者自动化测试时,有时会打开一个新的标签页或者新的窗口,直接使用xpath定位元素会发现找不到元素,在firefox中定位了元素还是找不到, 经过多次发现,在眼睛视野内看到这个窗口是在最前面, ...

随机推荐

  1. 二叉搜索树的实现及指针问题的一点思考(C++)

    今天实现二叉搜索树的时候因为指针的问题卡了一上午(实在不应该...),一直segmentation fault,个人感觉还是需要记录一下的. 首先贴一下做的题的意思: 输入一系列整数,建立二叉排序数, ...

  2. hdu 4049 2011北京赛区网络赛J 状压dp ***

    cl少用在for循环里 #include<cstdio> #include<iostream> #include<algorithm> #include<cs ...

  3. Servlet中的GET和POST之间的区别

    自己的感悟: get和post这是http协议的两种方法,另外还有head, delete等 这两种方法有本质的区别,get只有一个流,参数附加在url后,大小个数有严格限制且只能是字符串.post的 ...

  4. 第八篇:SOUI中控件事件的响应

    SOUI中提供了大部分常用的win32标准控件的实现,如pushbutton, checkbox, radiobox, edit, richedit, listbox, combobox, treec ...

  5. 【转】Java时间日期包 JodaTime

    maven: http://mvnrepository.com/artifact/joda-time/joda-time 1, 获取每天的零点 DateTime dt=new DateTime().w ...

  6. nginx日志中文变成类型\xE9\xA6\x96\xE9\xA1\xB5-\xE6\x8E\xA8\xE8\x8D\x90的东西

    感谢 http://my.oschina.net/leejun2005/blog/106791 代码如下: public class App { public static String str2He ...

  7. OAuth2.0 在 SSO中的应用~

    关于OAuth2.0的介绍,请看下面链接(讲的挺好的): http://blog.csdn.net/seccloud/article/details/8192707 我的理解: 一共四个角色,A:Cl ...

  8. hdu3033 背包变形

    题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=3033 大意:每类物品中至少买一件,比较简单 AC代码: #include<iostr ...

  9. 5.15[没什么营养的一段日子]A*

    五月份没有写过blog. 期中考刚过......漫漫文化课,无尽头. 马上要为联赛开坑了,激动啊. 刚听了孙柘的演讲..%%% 最近刷的题只有一道启发式合并,一道分层图,一道差分约束..然后不知不觉破 ...

  10. AWS S3 API实现文件上传下载

    http://blog.csdn.net/marvin198801/article/details/47662965