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,符合预期。
(2).对于www.pku.edu.cn的/about/index.htm页面请求,并没有被植入广告,符合预期。
(3).对于www.sohu.com的页面请求,并没有被植入广告,符合预期。
Linux下透明代理+Privoxy实现页面相关的广告植入相关推荐
- 查看linux的用户 7.2,linux下查看用户登入系统相关命令及编写脚本(七)
linux下查看用户登入系统相关命令及编写脚本(七) 查看用户登入系统日志 1.w 显示谁登入并正在做什么事 2.who 显示谁登入 -r:显示系统运行级别 3.sleep 睡眠命令(sleep 5 ...
- Linux下使用fstatfs/statfs查询系统相关信息
Linux下使用fstatfs/statfs查询系统相关信息 1. 功能 #include < sys/statfs.h > int statfs(const char *path, ...
- linux怎么打开.o文件,Linux下文件I/O操作的相关知识
Linux文件I/O主要指的是文件的输入输出,很多初学者对文件的I/O不是很了解,Linux文件I/O的操作较多,下面小编就给大家详细介绍下Linux文件I/O. linux 文件I/O教程(1) 一 ...
- linux下编写播放DVD的软件相关库
在标准的x86 linux下已经有相应的软件可以实现DVD播放,比如VLC播放器,之所以要自己写,是因为要用到嵌入式平台的机顶盒上,我们的目的就是要编写一个在机顶盒上可以播放dvd的软件. 使用的库为 ...
- Linux下设置代理方法
**禁网以后,得设置代理才能访问外网.虚拟机不能访问外网一直没找到正确的解决方法,折腾了好几天,终于让我找到了解决方法. 参考链接:虚拟机 centos设置代理上网 1.yum代理设置 可以通过命令v ...
- linux下使用代理连接外网
引言: 论坛中有一篇博客描述了linux代理的设置,出于好奇我也设置了一把.因为那篇文章描述比较简洁,所以我把详细的步骤贴出来,希望对大家有帮助. [b] 场景使用:[/b] 内网中的linux连不了 ...
- Linux 实现透明代理(使用开源项目 tproxy-example)
一.透明代理概述 根据百度百科的资料:透明代理的意思是客户端根本不需要知道有代理服务器的存在,它改变你的 request fields(报文),并会传送真实IP,多用于路由器的NAT转发中. 透明代理 ...
- linux下的IO重定向与管道相关的知识简析
一.bash重定向部分简单翻译 1.1.bash手册关于重定向短短的注解(因为过于经典,所以摘录出来) 我的翻译要开始毁经典啦... 参考: https://blog.csdn.net/spch200 ...
- linux下二级代理软件desproxy教程
desproxy的功能就是一级代理+端口映射 对本地指定的一个端口的请求会经过代理送到远程的主机 远程主机是代理服务器的话就实现了二级代理的功能:) 怎样获得Desproxy? http://desp ...
最新文章
- nginx rewrite和根据url参数location
- 【BZOJ】1034: [ZJOI2008]泡泡堂BNB(贪心)
- 开发自己的 chart - 每天5分钟玩转 Docker 容器技术(167)
- svg画css,CSS vs. SVG:图形文本的效果
- 2016北京集训测试赛(十三) Problem B: 网络战争
- PHP 中数组获取不到元素
- Intel® Math Kernel Library (Intel® MKL)
- ant接口用什么天线_天线接口 一个叫SMA 另一个叫TNC
- 项目-基于SSM的订餐管理系统
- 网站备案必须有服务器吗,域名备案必须有服务器吗
- 损失函数MSE和MAE的区别以及如何选择
- 小尺寸 GPS 北斗 GNSS 全向内置天线方案 CA-G01 CrossAir贴片天线
- 微信小程序css篇----字体(Font)
- 整流十五—网侧低频电流谐波抑制方法及其稳定性分析
- Excel散点图 如何用平滑线 连接 不连续的点
- 字体反爬虫处理猫眼(数字)
- python把.CSV文件转换成.JSON格式文件并格式化储存
- python全栈指的是什么_python全栈指的是什么意思
- 超导磁通量子计算机,超导量子比特系统在量子信息中的应用
- 搭建gataway鉴权流程