Giter Site home page Giter Site logo

zhiyi7 / gfw-pac Goto Github PK

View Code? Open in Web Editor NEW
790.0 34.0 265.0 2.44 MB

科学上网 PAC 成品文件以及生成器。可自定义代理域名和直连域名。不在自定义名单里的域名再按IP匹配,CNIP走直连,其他走代理。

License: Other

Python 8.37% JavaScript 91.63%

gfw-pac's Introduction

gfw-pac

科学上网 PAC 文件以及生成器。通过自定义域名和 CNIP 地址生成 PAC(Proxy auto-config) 文件。对存在于自定义域名和解析出的IP不是CNIP的域名使用代理。

此仓库每14天自动通过GitHub Action从apnic获取国内IPv4地址段并更新gfw.pac文件

代理工具普遍支持路由规则,为什么还要用 pac 文件?

如果浏览器所有流量都进入代理程序,那即使命中代理的直连规则,网络流量也要经过代理程序转发,性能会受影响。而先由浏览器通过 pac 文件决定用代理还是直连后,直连的流量不经过代理程序,性能更好。所有流行代理前端几乎都内置了 pac 文件,当选择代理前端提供的“pac模式”的时候,代理前端会将浏览器设置为它自动生成的 pac 文件。

特性

  • 速度快:优先按域名匹配,常用域名节省解析时间
  • IP规则前置:若域名解析出的 IPv4 地址属于国内,也返回直连,流量不经过代理程序
  • 可自定义需要代理的域名
  • 可自定义直连的域名
  • 可自定义直连的 TLD 域名,例如 .test
  • 直接可用的 gfw.pac 包含了常用的直连域名和代理域名

用法

  1. (推荐)下载并编辑 gfw.pac 的第一行换成自己的代理服务器直接使用。
  2. 按下面说明手工运行 gfw-pac.py 生成自己的 pac 文件。此种方法可自定义域名流向,更灵活。但现在大多数客户端都可以定义域名匹配规则,特殊域名通过客户端定制即可。

gfw-pac.py 使用说明

usage: gfw-pac.py -f 输出的PAC文件名 -p 代理服务器 [-h]
                  [--proxy-domains 自定义使用代理域名的文件]
                  [--direct-domains 自定义直连域名域名的文件]
                  [--localtld-domains 本地TLD文件]
                  [--ip-file APNIC下载的delegated文件]

参数说明:

-h 显示帮助
-f (必须)输出的 pac 文件
-p (必须)指定代理服务器,例如 PROXY 192.168.1.1:3128
--proxy-domains 自定义使用代理的域名文件,文件里每行一个域名
--direct-domains 自定义直连的域名文件,文件里每行一个域名
--localtld-domains 自定义直连的顶级域,文件里每行一个域名,必须带前导圆点(例如 .test)
--ip-file 指定本地的从 apnic 下载的 IP 分配文件。若不指定则自动从 apnic 下载

举例:

./gfw-pac.py -f gfw.pac \
             -p "PROXY 192.168.1.200:3128; DIRECT" \
             --proxy-domains=proxy-domains.txt \
             --direct-domains=direct-domains.txt \
             --localtld-domains=local-tlds.txt \
             --ip-file=delegated-apnic-latest.txt

技巧

gfw-pac's People

Contributors

actions-user avatar arokz avatar grandpaul avatar juneszh avatar ze3kr avatar zhiyi7 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

gfw-pac's Issues

新手求助

我想把gfw名单放在我的vps里面,让别人使用我的ip时,无法访问被gfw墙的域名,因为我的ip只用来代理电商,大佬指点一下怎么做到跟操作的

三级以上域名处理?

||googleapis.com
@@||clientservices.googleapis.com
@@||fonts.googleapis.com
@@||khm.googleapis.com
@@||khm0.googleapis.com
@@||khm1.googleapis.com
@@||khm2.googleapis.com
@@||khm3.googleapis.com
@@||khmdb.googleapis.com
||storage.googleapis.com
@@||translate.googleapis.com
@@||update.googleapis.com
@@||safebrowsing.googleapis.com

例如如上规则实际是有意义的,部分三级域名 wall 内可用,但经过 gfw-pac 处理后,只剩一个 "googleapis.com": 1,

Mac osx10.11.4报错

Traceback (most recent call last):
File "gfw-pac.py", line 289, in
main()
File "gfw-pac.py", line 273, in main
direct_rule = direct_rule.splitlines(False)
AttributeError: 'NoneType' object has no attribute 'splitlines'

环境:osx10.11.4 Python 2.7.10

A problem in line 273 of gfw-pac.py

if args.direct_rule:
        directrule_parts = urlparse.urlsplit(args.direct_rule)
        if not directrule_parts.scheme or not directrule_parts.netloc:
            # It's not an URL, deal it as local file
            with open(args.direct_rule, 'rb') as f:
                direct_rule = f.read()
        else:
            # Yeah, it's an URL, try to download it
            print 'Downloading user rules file from %s' % args.user_rule
            direct_rule = urllib2.urlopen(args.direct_rule, timeout=10).read()
direct_rule = direct_rule.splitlines(False) 

A small mistake which causes a error if direct_rule doesn't exist.

May change to this:

if args.direct_rule:
        directrule_parts = urlparse.urlsplit(args.direct_rule)
        if not directrule_parts.scheme or not directrule_parts.netloc:
            # It's not an URL, deal it as local file
            with open(args.direct_rule, 'rb') as f:
                direct_rule = f.read()
        else:
            # Yeah, it's an URL, try to download it
            print 'Downloading user rules file from %s' % args.user_rule
            direct_rule = urllib2.urlopen(args.direct_rule, timeout=10).read()
        direct_rule = direct_rule.splitlines(False) 
else:
        direct_rule = []

可否增加自定义需要代理的ip?

比如,该如何让telegram的ip段使用代理呢?
谢谢🙏!

Telegram IP段

91.108.4.0/22
91.108.8.0/22
91.108.12.0/22
91.108.20.0/22
91.108.36.0/23
91.108.38.0/23
91.108.56.0/22
149.154.160.0/20
149.154.164.0/22
149.154.172.0/22

socks5代理该怎么写?

var proxy = "SOCKS5 127.0.0.1:7080";
我写成上面那样会报错
但直接设置socks5代理并没有问题
浏览器是最新的firefox
谢谢~~

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.