[笔记] 一个生成基于gfwlist生成动态代理脚本的小程序pacmaker.py
ffmmx
posted @ 2012年11月20日 11:09
in 未分类
, 6422 阅读
已经添加代理实现,现在直接运行就可以生成基于gfwlist的自动代理脚本了.先贴出代码
#!/usr/bin/env python #Filename: pacmaker.py ''' 用于生成一个自动代理的脚本,使用autoproxy规则 ''' import os from optparse import OptionParser import urllib.request as req import urllib.parse as urlparse import base64 port = 80 protol = 'HTTP' host = 'localhost' avail_protol = ('HTTP','SOCKS4','SOCKS5',) output = os.path.realpath('.') + os.path.sep + 'pacmaked.pac' autoproxy_gfwlist = "http://autoproxy-gfwlist.googlecode.com/svn/trunk/gfwlist.txt" online_proxy = ( ( 'http://co.xinyali.info/includes/process.php?action=update', { 'type':0, 'u':autoproxy_gfwlist } ), ) gfwlist_file = None def make_pac(): gfwlist=None if gfwlist_file: with open(gfwlist_file,'r') as gfwfile: gfwlist = gfwfile.read() gfwlist = base64.b64decode(gfwlist).decode() else: import http.cookiejar cookie = http.cookiejar.CookieJar() opener = req.build_opener(req.HTTPCookieProcessor(cookie)) data = urlparse.urlencode(online_proxy[0][1]).encode() res = opener.open(online_proxy[0][0],data) gfwlist = res.read() gfwlist = base64.b64decode(gfwlist).decode() #print(gfwlist) pac_content = ''' function regExpMatch(url, pattern) { try { return new RegExp(pattern).test(url); } catch(ex) { return false; } } function FindProxyForURL(url, host) { %s return "DIRECT"; } ''' pac_part = [] for line in (i for i in gfwlist.split('\n') if i.find("!") != 0 and i.find('[') != 0 and len(i)>=3): return_str = 'return "{protol} {host}:{port}; DIRECT"; \n'.format( protol=protol, host=host, port=port ) #print(line) if line.find('@@') == 0: return_str = 'return "DIRECT"; \n' line = line[2:] if line.find('||') == 0: line = line[2:] match_str = line.replace('.',r'\\.') match_str = match_str.replace('/',r'\\/') if_str = r' if(regExpMatch(url,"^[\\w\\-]+:\\/+(?!\\/)(?:[^\\/]+\\.)?{match}"))'.format(match=match_str) else: if_str = r' if(shExpMatch(url, "http://*' + line + '*"))' pac_part.append(if_str+' '+return_str) #print(''.join(pac_part)) #print(pac_content % (''.join(pac_part))) pac_content = pac_content % (''.join(pac_part)) with open(output,'w') as outfile: outfile.write(pac_content) if __name__ == '__main__': usage = 'usage: %prog [option]' parser = OptionParser(usage=usage) parser.add_option('-o','--output',help='output file',dest='output',default=output) parser.add_option('-H','--host',help='hostname or ip of proxy',dest='host',default=host) parser.add_option('-p','--port',help='port of proxy',dest='port',default=port) parser.add_option('-t','--type',help='type of proxy',dest='protol',default=protol) parser.add_option('-i','--input',help="autoproxy input file",dest='input') (options,args) = parser.parse_args() print(options) if options.protol.upper() not in avail_protol: raise Exception('it\'s not support proxy protol.') protol = options.protol.upper() port = options.port host = options.host output = options.output gfwlist_file = options.input make_pac()
2018年7月15日 15:45
The device for the controlling of the heart beating is that how to work of the heart and the performances of the heart also. On the monitoring of the heart by the assignment writers uk in the hospitals are controlled by the pacemakers units.
2021年9月15日 13:32
Whether that you are running a enterprise or maybe managing a office, you have time in a lot of these workplaces. And soon after spending a total day working in the office, it is reasonably manageable to take into consideration cleaning in the office living space. But, absolutely nothing is to stress about, because there are various options available to pick up your work environment. The productive professionals your service are simply just one press ways. Simply by taking fewer time in addition to money, the technical and encountered professionals will work the full cleaning aspect.
2024年1月15日 20:32
Starting a programming career is an exciting and difficult endeavor. Learn the basics first, such as problem-solving techniques and coding languages, in order to successfully navigate this path. The first steps are to stay curious, look for mentorship, and work on real -world projects. Remain persistent and view obstacles as chances for personal development. You'll discover that the path becomes clearer and the opportunities are endless as you go deeper into the world of programming. For those looking to delve deeper into complex ideas on this fascinating adventure [url=https://dissertationwritinghelp.uk/phd-dissertation-proposal-help/]Phd Dissertation Proposal Help Uk[/url] is an invaluable resource.