当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 5 篇帖子 ] 
作者 内容
1 楼 
 文章标题 : [四星]写一个脚本将adblock的规则转为squid规则
帖子发表于 : 2010-08-16 10:09 
论坛管理员

注册: 2005-03-27 0:06
帖子: 10149
系统: Ubuntu 12.04
送出感谢: 7
接收感谢: 130
1 任务内容: 写一个脚本每天定时将adblock的规则转为squid规则,使squid使用最新的规则来过滤广告

2 任务的难度:四星

3 任务的目的: 学习脚本语言和SQUID

4 任务所涉及的软件: 任意你熟悉的脚本语言

5 任务将大致消耗的时间: 一周

6 参考网站:
http://easylist.adblockplus.org/easylist.txt
http://adblock-chinalist.googlecode.com ... dblock.txt


页首
 用户资料  
 
2 楼 
 文章标题 : Re: [四星]写一个脚本将adblock的规则转为squid规则
帖子发表于 : 2010-08-16 10:32 
头像

注册: 2007-05-06 2:46
帖子: 15634
送出感谢: 0 次
接收感谢: 2
要是将adblock的规则转为urlfilter阻挡规则

opera就真是神器了哦啊

神神叨叨的从来没干过正经事
:em04


_________________
وإذا كان هذا لا يحصل أكثر من 100 ملاحظات ، انا ذاهب الى غضب


页首
 用户资料  
 
3 楼 
 文章标题 : Re: [四星]写一个脚本将adblock的规则转为squid规则
帖子发表于 : 2010-08-23 11:53 
论坛管理员

注册: 2005-03-27 0:06
帖子: 10149
系统: Ubuntu 12.04
送出感谢: 7
接收感谢: 130
adblock2squid.py

代码:
#!/usr/bin/env python
# -*- coding: utf-8; -*-
# (c) UbuntuChina, http://www.ubuntu.org.cn
# (c) free software, GPLv3
# Connect: oneleaf@gmail.com
'''
本脚本的作用是将ADBlock的规则转为SQUID的规则
使用方法:
1 修改 /etc/squid/squid.conf ,找到 http_access allow localhost 行,在上面增加如下两行:
acl adblock url_regex "/etc/squid/adblock.rules"
http_access deny adblock
2 使用root帐号来运行本脚本
  sudo python adblock2squid.py
3 重启squid使其生效
  sudo /etc/init.d/squid restart
'''

import urllib2, re, os

def addcustomrules(outfile,customfile='adblock.txt'):
    if not os.path.exists(customfile):
        print 'not find',customfile,'ignore'
        return
    print 'loading',customfile
    lines=open(customfile).readlines()       
    addruletext(outfile,lines)

def addrules(outfile,adblockurl):
    print 'loading',adblockurl
    html = urllib2.urlopen(adblockurl).readlines()
    addruletext(outfile,html)

def addruletext(outfile,lines):
    for line in lines:
        rule=line.strip()
        if rule=='' or rule[0]=='!' or rule[0]=='[' : continue
        if rule.find('##')>=0: continue
        if rule.find('@@')==0: continue
        rule=rule.replace('.','\\.')
        rule=rule.replace('?','\\?')
        rule=rule.replace('*','.*')
        rule=rule.replace('^','.')
        if rule.find('||')==0: rule='!!'+rule[2:]
        if rule[0]=='|': rule='^'+rule[1:]
        if rule[-1]=='|': rule=rule[:-1]+'$'
        rule=rule.replace('|','\\|')           
        if rule.find('!!')==0: rule='^http://(.*?\\.|)'+rule[2:]
        domain=''
        c=rule.find('$')
        if c>0:
           part=rule[c:]
           r=''
           if part.find('image')>=0:r=r+'|jpg|jpeg|svg|png|bmp|gif'
           if part.find('object')>=0:r=r+'|swf|jar'
           if part.find('script')>=0:r=r+'|js|vbs'
           if part.find('domain=')>=0:
              domain=part[part.find('domain=')+7:]
              if domain.find(',')>=0: domain=domain[:domain.find(',')]
              if domain.find('~')>=0: domain=domain.replace('~','.*\\.')
              if domain.find('\\|')>=0: domain='('+domain.replace('\\|','|')+')'
           if r:r='.*('+r[1:]+')'
           rule=rule[:c]+r             
        if rule[-1]=='^': rule=rule[:-1]
        try:
           if rule.find("http")>=0:
              if domain != '' : continue
              rule=re.compile(rule)
           else:
              rule=re.compile(domain+rule)
        except:
           continue
        print 'add:',rule.pattern,'from',line.strip()
        outfile.write(rule.pattern+"\r\n")

if __name__ == '__main__':
    outfile=open("/etc/squid/adblock.rules","w")
    addcustomrules(outfile,"adblock.txt")
    addrules(outfile,"http://easylist.adblockplus.org/easylist.txt")
    addrules(outfile,"http://adblock-chinalist.googlecode.com/svn/trunk/adblock.txt")
    outfile.close()


页首
 用户资料  
 
4 楼 
 文章标题 : Re: [四星]写一个脚本将adblock的规则转为squid规则
帖子发表于 : 2010-08-23 12:10 
头像

注册: 2005-08-14 21:55
帖子: 58428
地址: 长沙
送出感谢: 4
接收感谢: 274
squid的不知道什么格式嘛。


_________________
● 鸣学


页首
 用户资料  
 
5 楼 
 文章标题 : Re: [四星]写一个脚本将adblock的规则转为squid规则
帖子发表于 : 2010-08-23 12:34 
论坛管理员

注册: 2005-03-27 0:06
帖子: 10149
系统: Ubuntu 12.04
送出感谢: 7
接收感谢: 130
将adblock的格式转为标准的正则表达式,然后利用squid的url_regex来匹配过滤。

acl adblock url_regex "/etc/squid/adblock.rules"
http_access deny adblock


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 5 篇帖子 ] 

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:没有注册用户 和 1 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译