web广告推送功能开发总结

来源:互联网 发布:java监控系统日志抓取 编辑:程序博客网 时间:2024/05/16 03:42

     这段时间研究了下web广告推送功能,简单的需求如下:

1,android手机连上wifi后,提示认证登录,iphone 手机连上wifi后自动弹出指定页面

2,android手机点击认证登录,iphone手机弹出广告页面后,用户点击上网后,可以正常上网。

3,每次断开wifi重连时都需要弹广告,一天最多弹3次,每个连接客户端最多弹3次。3次后,断开wifi重连不在弹出广告,可以正常上网。

    就这三个需求。我们网关系统是linux系统。所以实现方法很简单,利用iptables防火墙即可实现。实现步骤主要如下:


1, 利用iptables 防火墙,将所有访问80端口的上网数据拦截到本地。

iptables -t nat  -A PREROUTING -s 192.168.0.x  -p tcp --dport 80 -j REDIRECT


2,在本地创建一个socket,监听80端口的数据包,根据数据包中客户端地址,得到客户端mac地址,根据mac地址判断出设备是否是iphone手机还是

android手机。

mac地址跟ip地址是一样的,是全球唯一的,不同的厂商分配的mac地址不一样。所以得到mac地址就可以得到设备的生产厂商。


3,过滤掉手机自带app的http请求报文方法是根据http请求中的useragent来判断是否是浏览器请求。(这个方法虽然不是特别严谨,但是没发现更好的办法,如果有更好的办法请指点),只有浏览器请求报文才发302重定向报文给客户端,app的访问报文一般是不会带useragent。以此来区分报文,因为只有web客户端才能接收web重定向的页面,app是无法访问我们制定的web页面的。所以app的http请求要过滤掉。这个非常重要。


4,判断访问的手机类型后,如果是iPhone手机,则发301重定向给客户端,并且删除拦截上网数据的规则。

HTTP/1.1 302 Moved Temporarily\r\nAllow: GET,POST,HEAD\r\nMIME-Version: 1.0\r\nServer: NetEngine Server 1.0\r\nPragma: No-Cache\r\nLocation: http://%s/wifi\r\n\r\n

这是一个302地址重定向http报文,直接send给拦截的客户端即可实现访问网页的转移。Location的地址是你要客户端转向去访问的地址。


4,如果判断访问请求不是浏览器的http报文,则直接给客户端回应302重定向报文。

后果是要想让android手机app能正常使用,手机连上wifi后必须打开浏览器,提示连接wifi认证后,才能正常上网。iPhone手机不会有问题,原因是iPhone手机连上具有重定向的wifi热点后会自动去访问iPhone默认的网站,然后路由器将这个访问请求拦截下来推送一个302重定向后,iPhone就会自动去访问我们制定的web页面了。

效果就是iPhone手机一连上wifi自动弹出广告,而android手机不会,有些高系统版本的android手机也有这个功能了。但是大部分android系统还是没有这个特性。


5,手机浏览器的useragent总结了一些如下:

Mozilla

AppleWebKit

Mobile Safari

MQQBrowser

Apple WebKit

UCWEB

Firefox

Fennec

Opera

Presto

BrowserNG

KscOAuth

QQMusic


做好以上4点,基本的web广告推送功能就ok了,其中还有些问题需要考虑,我的方案还不是很好。

1,如何区分手机app的http请求报文和手机浏览器的http报文

2,如何让android手机也在连上wifi时自动弹出广告。(可能广告路由器根本做不到,需要android系统自己去支持吧)

3,广告服务器这块没有很好的考虑如何搭建,如何可以快速更新广告内容,如何管理广告内容。

这是一个不完善的设计,只是我自己的一些研究,如果要达到商用的地步还需要考虑很多东西。欢迎大家指正




0 0
原创粉丝点击