Linux下透明代理+Privoxy实现页面相关的广告植入

一. 前言

    Linux系统下Privoxy实现广告植入的方式很简单。通常的做法,就是将HTTP流量(端口80,8080等)NAT到Privoxy,然后由Privoxy实现流量的过滤与广告的植入。这种方式并没有什么问题。但是,事情过于简单,其应用也往往存在局限性。首先,将端口80/8080的流量NAT到Privoxy,这前提就约束了流量必须是符合HTTP协议的,否则Privoxy无法处理,产生问题;其次,利用Privoxy进行多规则的过滤,将会耗费较多的系统计算资源。
    本文的方案,将流量的识别与过滤功能剥离出Privoxy中,由前文《Linux环境下基于条件约束的HTTP/TCP透明代理和流量牵引方案》所构建的透明代理来实现。透明代理能够对HTTP流量进行准确的分析,并将符合要求的流量牵引至Privoxy。这里的分析,可以基于URI、Host、Cookies等内容的分析,也即标题中提到的“页面相关”。Privoxy的功能则比较简单,对于所有接入流量,在</head>标签后直接植入广告即可,极大降低了Privoxy的资源消耗。

二. 方案

2.1 透明代理提取相关页面

    透明代理方案见Linux环境下基于条件约束的HTTP/TCP透明代理和流量牵引方案一文,在此不再详述。在本文中,利用其具备Host和URI过滤功能,实现特定页面的代理和流量牵引。

2.2 Privoxy广告植入

2.2.1 安装

    本文基于Ubuntu 12.04.5 LTS,使用apt-get install进行安装
#apt-get install privoxy
    安装完成后,系统配置文件处于 /etc/privoxy 目录下

2.2.2 配置config

    配置无需多改,仅修改两个地方即可。
listen-address  localhost:8118
    将localhost改为监听的网卡IP地址
accept-intercepted-requests 0
    将其改为1

2.2.3 配置user.filter

    删除原有的user.filter文件(将其改名为.bak文件也可以),生成新的user.filter文件,并加入如下内容
FILTER: Add-Tencent-Logo Add Tencent Logo to Specific Page
s|</head>|<div id="indexheadpopup"><imgsrc="http://mat1.gtimg.com/www/images/qq2012/festival/lianghui2016/logo2.png"></div>$0|
    意思就是在</head>之后植入<div id="indexheadpopup"><img src="http://mat1.gtimg.com/www/images/qq2012/festival/lianghui2016/logo2.png"></div>广告,这里为了简便,我仅仅链接了腾讯网的Logo图作为广告。

2.2.4 配置user.action

    前文已经阐述了,流量的识别和过滤工作,都由透明代理来实现,Privoxy只要专注于广告植入即可。所以,对于所有牵引过来的流量,直接植入即可,极大降低Privoxy的压力。
    删除原有的user.action文件(将其改名为.bak文件也可以),生成新的user.filter文件,并加入如下内容
{+filter{Add-Tencent-Logo}}
.*
    修改完成,重新启动Privoxy进程。
/usr/sbin/privoxy --pidfile /var/run/privoxy.pid --user privoxy /etc/privoxy/config

三. 实验验证

    实验拓扑如下图所示。

    Linux网桥上安装透明代理和Privoxy。实验中,将 www.pku.edu.cn 的根目录请求(GET / HTTP/1.1)代理到本机的Privoxy进程,由Privoxy进程植入广告。
    其它页面,或其它域名的页面请求直接放行,不进行代理和广告植入,从而实现了页面内容相关。这仅仅是个验证的例子,当然,若要是对页面的HTTP GET请求进行细致分析,在页面内容相关方面,可以做得更为深入。

    

    (1).对于www.pku.edu.cn的/根页面请求,页面一开始被植入了广告,可以看到腾讯网的Logo,符合预期。

Linux下透明代理+Privoxy实现页面相关的广告植入_第1张图片

    (2).对于www.pku.edu.cn的/about/index.htm页面请求,并没有被植入广告,符合预期。
Linux下透明代理+Privoxy实现页面相关的广告植入_第2张图片

    (3).对于www.sohu.com的页面请求,并没有被植入广告,符合预期。

Linux下透明代理+Privoxy实现页面相关的广告植入_第3张图片

你可能感兴趣的:(Linux下透明代理+Privoxy实现页面相关的广告植入)