Skip to content

Commit 6981c02

Browse files
committed
added blocksite updater function with new PAC file.
1 parent 7bdca5b commit 6981c02

File tree

6 files changed

+66
-17
lines changed

6 files changed

+66
-17
lines changed

components/blocksites_updater.py

+12-6
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,34 @@
11
import time
2-
2+
import yaml
33
import re
44
import requests
55

66

77
class BlocksitesUpdater(object):
88

9-
regex_rules=r'http.?://([0-9A-Za-z.]*)/'
9+
regex_rules=r'http.?://\*?([0-9A-Za-z.\-]*)/'
1010
def __init__(self,url):
11-
self.url=url
12-
pass
11+
self.url=url.format(time=int(time.time()*100))
12+
self.get()
13+
self.parse_domain_list()
1314

1415
def get(self):
1516
resp = requests.get(self.url)
1617
self.data = [i.strip('"') for i in resp.text.split(',')]
18+
return self.data
1719

1820

1921

2022
def parse_domain_list(self):
2123
domain = set()
2224
for data in self.data:
2325
result=re.search(self.regex_rules, data)
24-
domain.add(result.group(1))
25-
return domain
26+
try:
27+
domain.add(result.group(1).strip("."))
28+
except:
29+
pass
30+
self.domain=domain
31+
2632

2733

2834

components/pac_generator.py

+13-4
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,17 @@
44
from jinja2 import FileSystemLoader
55
import os
66

7+
from components.blocksites_updater import BlocksitesUpdater
8+
9+
710
class PacGenerator(object):
8-
def __init__(self,config):
11+
def __init__(self,config,block_list=None):
912
self.env = Environment(loader=FileSystemLoader('template'))
1013
def yaml_loader(file):
1114
with open(file) as f:
1215
return yaml.load(f)
1316
self.config=yaml_loader(config)
17+
self.block_list=block_list
1418

1519

1620
def get_ip(self):
@@ -25,15 +29,20 @@ def get_ip(self):
2529

2630
def build_pac(self):
2731
info={}
28-
info['proxy_domain']=self.config['dns_domain']
32+
if self.block_list:
33+
info['block_urls']=self.block_list
34+
else:
35+
info['block_urls']=self.config['dns_domain']
36+
info['direct_urls']=self.config['direct_urls']
2937
try:
3038
info['proxy_ip']=os.environ["IPADDR"]
3139
except:
3240
info['proxy_ip']=self.get_ip()
3341
info['proxy_port']=self.config.get("proxy_port")
34-
template = self.env.get_template("proxy.pac")
42+
template = self.env.get_template("new_proxy.pac")
3543
self.file_writer(template.render(info=info))
3644

3745
def file_writer(self,data):
3846
with open("pac/proxy.pac",'w+') as file:
39-
file.write(data)
47+
file.write(data)
48+

components/proxy_checker.py

+5-1
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,11 @@ def yaml_loader(file):
2828
else:
2929
config=yaml_loader('config.yaml')
3030
check_url=config.get('validate_url')
31-
speedtest_url=config.get('speedtest_url')
31+
https_enabled = config.get('https_enabled')
32+
if https_enabled:
33+
speedtest_url=config.get('speedtest_url_https')
34+
else:
35+
speedtest_url=config.get('speedtest_url')
3236
timeout=config.get('timeout')
3337
checker_timeout=config.get('checker_timeout')
3438
speedtest_times=config.get("speedtest_times")

config.yaml

+20-2
Original file line numberDiff line numberDiff line change
@@ -40,10 +40,18 @@ validate_url: "http://ipservice.163.com/isFromMainland"
4040
speedtest_url : "http://music.163.com/test"
4141
speedtest_url_https : "https://music.163.com"
4242

43-
https_enabled : true,
43+
https_enabled : true
4444

4545
# HTTPS Related options
4646

47+
48+
# Blocksites updater
49+
50+
enable_blocksites_updater : true
51+
updater_url : ""
52+
53+
# Blocksites updater
54+
4755
speedtest_times : 3
4856
timeout: 5
4957
checker_timeout: 3
@@ -64,4 +72,14 @@ upstream_dns : "8.8.8.8"
6472

6573
# Disable normal HTTP Proxy
6674
# this is useful if u make a public server on the internet and avoid them to use it as a public HTTP Proxy. (Need to use with PAC or DNS)
67-
disable_proxy : false
75+
disable_proxy : false
76+
77+
78+
# Auto Generate Infos.
79+
80+
direct_urls :
81+
- "*inter.iqiyi.com*"
82+
- "*file.xiami.com*"
83+
- "*pcvideoaliyun.titan.mgtv.com*"
84+
- "*vhotlx.video.qq.com*"
85+
- "*newflv.sohu.ccgslb.net*"

main.py

+14-1
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
import yaml
1212

1313
from async_proxy import handle_client
14+
from components.blocksites_updater import BlocksitesUpdater
1415
from components.pac_generator import PacGenerator
1516
from components.proxy_checker import ProxyChecker
1617
from components.proxy_helper import ProxyHelper
@@ -26,8 +27,16 @@ def yaml_loader(file):
2627

2728
if __name__ == '__main__':
2829
logging.basicConfig(level=logging.INFO)
29-
PacGenerator("config.yaml").build_pac()
30+
3031
config = yaml_loader("config.yaml")
32+
if config.get('enable_blocksites_updater'):
33+
block_generator = BlocksitesUpdater(config.get("updater_url"))
34+
else:
35+
block_generator = None
36+
37+
PacGenerator("config.yaml",block_generator.data if block_generator else None).build_pac()
38+
39+
3140

3241
# pid = os.fork()
3342
# if pid == 0:
@@ -65,6 +74,10 @@ def yaml_loader(file):
6574
sys.exit(1)
6675

6776
proxy_helper=ProxyHelper.get_instance()
77+
78+
if block_generator:
79+
proxy_helper.black_list=list(block_generator.domain)
80+
6881
helper = Helper("Helper",proxy_helper)
6982
helper.start()
7083

template/new_proxy.pac

+2-3
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,15 @@
11
var block_urls={{info.block_urls}}
22
var direct_urls={{info.direct_urls}}
3-
var proxies_str='{%- for item in info.proxies %}PROXY {{item}};{%- endfor %}';
43
function FindProxyForURL(url, host) {
54
if (shExpMatch(url,'http://cache.video.qiyi.com/vms*')) return proxies_str;
65
for(var i in direct_urls){
76
var direct_url= direct_urls[i];
87
if (shExpMatch(url,direct_url)) return 'DIRECT';
98
}
109
for(var i in block_urls){
11-
var block_url=block_urls[i]
10+
var block_url=block_urls[i];
1211
if (shExpMatch(url,block_url)){
13-
return proxies_str;
12+
return "PROXY {{info.proxy_ip}}:{{info.proxy_port}};";
1413
}
1514
}
1615
return 'DIRECT';

0 commit comments

Comments
 (0)