Privoxy教程
简介
Privoxy 是一个 代理软件
简单说,就是进出你电脑的流量守门人。借由 Privoxy,我们可以控制出去的请求,还可以改写返回的响应。不必要的请求 – 比如视频广告的地址、图片广告的地址,我们可以直接 block
掉;不必要的响应内容 – 比如页面中的文字广告,我们可以借由 filter
过滤掉,不让它们在浏览器页面上显示。
安装 Privoxy
Privoxy 支持的平台非常多:
针对各个平台,Privoxy 均提供有安装说明。
下面简单提一下几个平台。
Windows 平台
Windows 平台下的安装通常都可视化,下载安装包,双击,然后根据提示,一路点击即可安装。
Linux 平台
多数时候可以通过仓库安装。
比如 Ubuntu:
sudo apt-get install privoxy
又比如 openSUSE:
sudo zypper install privoxy
mac 平台
mac 上如果有安装 homebrew,则可以执行
brew install privoxy
来安装 Privoxy。
实在喜欢折腾的,就下载源代码自己编译安装。
代理转发
配置文件说明
主配置文件
对于 Windows 系统,主配置文件放置在跟 privoxy.exe 相同的目录下,文件名为 config.txt
对于“Linux/Unix”,主配置文件放置在 /etc/privoxy 目录下,文件名为 config
Privoxy 的配置文件,都是纯文本文件。如果某一行是以 井号 # 开头,说明这一行是注释。
如何定制 Privoxy 的“监听端口及绑定地址”
先来说最最基本的配置——设定 Privoxy 的监听端口号和绑定的地址。
介绍这个的目的,是让你先稍微熟悉一下——如何修改 Privoxy 的主配置文件。因为后面的定制,需要经常去修改它。
Privoxy 的监听端口号,默认是 8118,默认绑定的地址是 127.0.0.1(这个地址代表“当前系统”)。由于默认是绑定在 127.0.0.1 这个地址,所以只有当前系统的软件才可以连接到 Privoxy 的监听端口。
如果你希望其它操作系统的软件也可以连接到 Privoxy 的监听端口,可以修改绑定的地址,把 127.0.0.1 改为 0.0.0.0 表示绑定在“任意地址”。
操作步骤如下:
找到“主配置文件”,用你比较顺手的文本编辑器打开,在尾部增加如下一行
listen-address 0.0.0.0:8118
如果你不喜欢 8118 这个端口号,也可以换成别的。
修改完之后,启动 Privoxy,然后在命令行使用 netstat 命令,就可以看到多出来一个 8118 的端口。
如何定制“HTTP 代理转发”
“HTTP 代理转发”就是说:Privoxy 把自己收到的 HTTP 请求转给另一个 HTTP 代理,再由该代理转到你最终访问的网站。
HTTP 代理转发的语法如下(把该语法添加在“主配置文件”尾部):
forward target_pattern http_proxy:port
语法解释:
该命令分3段,各段之间用空格分开(可以用单个空格,也可以多个空格)
第1段的 forward 是固定的,表示:这是 HTTP 转发
第2段的 target_pattern 是个变量,表示:这次转发只针对特定模式的 HTTP 访问目标
第3段的 http_proxy:port 也是变量,表示:要转发给某个 HTTP 代理(IP 冒号 端口)。如果“第3段”只写一个单独的小数点,表示直连(不走代理)。
举例1
forward / 127.0.0.1:8080
上述这句表示:
把所有的 HTTP 请求都转发给本机(127.0.0.1 表示本机)的 8080 端口
target_pattern 设置为“单个斜线”,表示匹配“所有的 URL 网址”
举例2
forward .google.com/ 127.0.0.1:8080
上述这句表示:
如果 HTTP 请求是发送给 .google.com 这个域名的下级域名,那么就把该 HTTP 请求转发给本机(127.0.0.1 表示本机)的 8080 端口
.google.com 的写法,可以匹配如下这类域名:
www.google.com
mail.google.com
plus.google.com
(以此类推)
补充说明:
本例子中,target_pattern 变量是 .google.com/
这个写法表示:该变量只匹配域名,不匹配网页的路径。根据 Privoxy 的语法规则,最末尾的斜线可以省略。
因此,本例子也可以等价地写为:
forward .google.com 127.0.0.1:8080
举例3
forward-socks5 .onion localhost:9050 .
上述这句表示:
把顶级域名为 .onion 的 HTTP 请求都转发给本机(localhost 也可以用来表示本机,相当于 127.0.0.1)的 TOR SOCKS 端口
补充说明:
普通互联网的域名,顶级域名不会是 .onion
这个顶级域名,是专门用于 TOR 暗网的。因此,本例子就是用来转发 TOR 暗网的 HTTP 请求,让 Privoxy 把这类请求转给 TOR 的 SOCKS 端口。
如何定制“SOCKS 代理转发”
所谓的“SOCKS 代理转发”,就是说:Privoxy 把自己收到的 HTTP 请求转给另一个 SOCKS 代理;如果需要的话,还可以由这个 SOCKS 代理再转给另一个 HTTP 代理。
示意图1
(先转发到 SOCKS 代理,然后转到目标站)
|====>| |====>| |====>|
浏览器| |Privoxy| |SOCKS代理| |目标网站
|<====| |<====| |<====|
|此阶段是 | |此阶段是 | |此阶段是 |
|HTTP | |SOCKS| |HTTP |
示意图2
(先转发到 SOCKS 代理,再转发到某个 HTTP 代理,最后才转到目标站)
|====>| |====>| |====>| |====>|
浏览器| |Privoxy| |SOCKS代理| |HTTP代理| |目标网站
|<====| |<====| |<====| |<====|
|此阶段是 | |此阶段是 | |此阶段是 | |此阶段是 |
|HTTP | |SOCKS| |HTTP | |HTTP |
SOCKS 代理转发,包括如下几种语法:
forward-socks4 target_pattern socks_proxy:port http_proxy:port
forward-socks4a target_pattern socks_proxy:port http_proxy:port
forward-socks5 target_pattern socks_proxy:port http_proxy:port
forward-socks5t target_pattern socks_proxy:port http_proxy:port
语法解释:
该命令分4段,各段之间用空格分开(可以用单个空格,也可以多个空格)
第1段是以 forward 开头的,表示 SOCKS 转发的类型。目前支持 4 种类型。
前面3种(forward-socks4 forward-socks4a forward-socks5)分别对应不同版本的 SOCKS 协议。
最后一种 forward-socks5t 比较特殊,是基于 SOCKS5 协议版本,但是加入针对 TOR 的扩展支持(优化了性能)。只有转发给 TOR 的 SOCKS 代理,才需要用这个类型。
第2段的 target_pattern 是个变量,表示:这次转发只针对特定模式的 HTTP 访问目标
第3段的 socks_proxy:port 也是变量,表示:要转发给某个 SOCKS 代理(IP 冒号 端口)
第4段的 http_proxy:port 也是变量,表示:在经由前面的 SOCKS 代理之后,再转发给某个 HTTP 代理(IP 冒号 端口)
第4段如果写成一个单独的小数点,相当于“示意图1”;如果第4段填写了具体的 IP 和端口,相当于“示意图2”。
举例1
如果你本机安装了 TOR Browser 软件包,可以使用如下语法,把 Privoxy 收到的 HTTP 请求转发给 TOR Browser 内置的 SOCKS 代理。
forward-socks5 / 127.0.0.1:9150 .
根据“访问的网站”分流到不同的翻墙通道
forward / .
forward .youtube.com 127.0.0.1:8000
forward-socks5 program-think.blogspot.com 127.0.0.1:9150 .
第1行表示:因为匹配的目标是 / 表示匹配“所有的网址”。所以这条可以看成是“默认规则”。(在 Privoxy 里面,“后面的规则”会覆盖“前面的规则”,所以“默认规则”总是写在开头)。
第2行表示:凡是 .youtube.com 的下级域名都走 127.0.0.1:8000 的 HTTP 代理。
第3行表示:访问 program-think.blogspot.com 站点都走 127.0.0.1:9150 的 SOCKS 代理。(提醒一下:此行末尾的小数点别漏看了)
例如,安装SSCap4.0以后,内网不可以访问,可以修改配置文件:
forward-socks5 / 127.0.0.1:1080 .
forward 18.16.*.* .
这样18.16..的内网就即可访问。
代理切换
如果想把不同的网址切换到不同的代理,就使用action功能,可以使用user.action文件,
或者自定义一个文件,在config中添加下文,这表示添加一个动作文件,文件名是pac.action。在同目录下建立文件“pac.action”,并写入配置。
actionsfile pac.action
示例:
{{alias}}
direct = +forward-override{forward .}
ssh = +forward-override{forward-socks5 127.0.0.1:7000 .}
gae = +forward-override{forward 127.0.0.1:8000}
default = direct
#==========默认代理==========
{default}
/
#==========直接连接==========
{direct}
.edu.cn
202.117.255.
222.24.211.70
#==========SSH代理==========
{ssh}
.launchpad.net
#==========GAE代理==========
{gae}
.webupd8.org
222.24.211.70
上面的{{alias}}部分定义了一些缩写,注意http代理和socks代理的写法不同。
后面的如{direct}部分定义对哪些地址应用这个代理。其中“/“表示全部地址。注意一个URL的域名部分只能用glob匹配,而地址部分可以用复杂的正则表达式。具体可以看Privoxy的文档
这些规则在后面的会覆盖前面的,比如222.24.211.70实际是以gae代理访问的。这样可以实现一些稍微复杂的功能
参考:
polipo/privoxy 实现 Linux 系统全局/自动代理
Privoxy教程的更多相关文章
- 使用Privoxy做智能代理切换
使用Privoxy做智能代理切换 You take the blue pill, the story ends, you wake up in your bed, and believe whatev ...
- linux使用privoxy将55转为http代理
=============================================== 2018/3/21_第3次修改 ccb_warlock 更新 ...
- centos7安装privoxy
本文分为三部分,第一部分是在阿里云的ECS上安装Privoxy,第二部分是在AWS的EC2上安装Privoxy,第三部分是Privoxy的配置. 第一部分:阿里云ECS安装Privoxy 配置yum源 ...
- Angular2入门系列教程7-HTTP(一)-使用Angular2自带的http进行网络请求
上一篇:Angular2入门系列教程6-路由(二)-使用多层级路由并在在路由中传递复杂参数 感觉这篇不是很好写,因为涉及到网络请求,如果采用真实的网络请求,这个例子大家拿到手估计还要自己写一个web ...
- Angular2入门系列教程6-路由(二)-使用多层级路由并在在路由中传递复杂参数
上一篇:Angular2入门系列教程5-路由(一)-使用简单的路由并在在路由中传递参数 之前介绍了简单的路由以及传参,这篇文章我们将要学习复杂一些的路由以及传递其他附加参数.一个好的路由系统可以使我们 ...
- Angular2入门系列教程5-路由(一)-使用简单的路由并在在路由中传递参数
上一篇:Angular2入门系列教程-服务 上一篇文章我们将Angular2的数据服务分离出来,学习了Angular2的依赖注入,这篇文章我们将要学习Angualr2的路由 为了编写样式方便,我们这篇 ...
- Angular2入门系列教程4-服务
上一篇文章 Angular2入门系列教程-多个组件,主从关系 在编程中,我们通常会将数据提供单独分离出来,以免在编写程序的过程中反复复制粘贴数据请求的代码 Angular2中提供了依赖注入的概念,使得 ...
- Angular2入门系列教程1-使用Angular-cli搭建Angular2开发环境
一直在学Angular2,百忙之中抽点时间来写个简单的教程. 2016年是前端飞速发展的一年,前端越来越形成了(web component)组件化的编程模式:以前Jquery通吃一切的田园时代一去不复 ...
- wepack+sass+vue 入门教程(三)
十一.安装sass文件转换为css需要的相关依赖包 npm install --save-dev sass-loader style-loader css-loader loader的作用是辅助web ...
随机推荐
- Python的基本语法2
一.运算符 # 算术运算符, +, -, *, /, //, %, **, 注意//为整除 # 赋值运算符, =, +=, -=, *=, /=, //= ,%=, **= # 比较运算符, ==, ...
- VMware运行gazebo,关于vmw_ioctl_command error Invalid argument错误
运行rviz 时报 VMware: vmw_ioctl_command error 无效的参数. 这个错误. 或者 运行gazebo,关于vmw_ioctl_command error Inval ...
- macOS 版微信小助手,支持微信多开、防撤回、远程控制mac、自动回复等等
微信小助手 GitHub大牛提供的微信小助手是一款插件,该插件具备多开.防撤回.免手机认证登录.自动回复.远程控制自己的 macOS.群发等众多功能 GitHub网址:https://github.c ...
- Docker Machine批量安装docker host
Dokcer Machine Docker Machine 可以批量安装和配置 docker host 提高docker的安装效率 同时减少人工安装操作的失误 [root@localhost ...
- [svc]简单理解什么是rpc调用?跟restapi有何区别?
什么是rpc调用 restapi调用方式是对数据的crud. 常见的我们写flash写个api,或者借助django drf写个标准的resetapi,一个url可以借助httpget post pu ...
- 2018-2019-1 20189203《Linux内核原理与分析》第九周作业
第一部分 课本学习 进程的切换和系统的一般执行过程 进程调度的时机 Linux内核系统通过schedule函数实现进程调度,进程调度的时机就是内核调用schedule函数的时机.当内核即将返回用户空间 ...
- Oracle 11g R2 Backup Data Pump(数据泵)之expdp/impdp工具
Oracle Data Pump(以下简称数据泵)是Oracle 10g开始提供的一种数据迁移工具,同时也被广大DBA用来作为数据库的逻辑备份工具和体量较小的数据迁移工具.与传统的数据导出/导入工具, ...
- 发布到FaceBook试玩广告,FaceBook要求要一个Html文件
Facebook 试玩广告具体要求: 试玩广告参数是创建试玩广告素材时要满足的要求. 试玩素材应为 HTML5 格式. 试玩广告素材不应使用 mraid.js 格式. 包含所有素材的试玩广告的单个 H ...
- python装饰器扩展之functools.wraps
我们知道函数被装饰器,装饰后,所有的属性,以及内置函数就失效了. 原因是函数类型变成了warpper类型 示例1:不带wraps装饰器示例 def warfunc(func): def warpper ...
- PHP多维数组替换某一元素的值
数组结构如下所示: $arr = [ [ 'id' => 1, 'sub'=> [ [ 'value' => 11.2 ], [ 'value' => 34.5 ] ] ], ...