convert gfwlist to pac or other formats, support custom rules.
Project description
GenPAC
基于gfwlist的多种代理软件配置文件生成工具,支持自定义规则
目前支持的格式有: PAC, Dnsmasq, V2Ray, Shadowsocks, Quantumult X, Shadowrocket, Surge, Wingy, Potatso 和 IP (国别IP列表), List (gfwlist格式的列表), Copy (复制源)。示例
注意: 生成后的规则不会匹配网址路径,只会检查域名(包括子域名),如|http://sub2.sub1.domain.com/path/to/file.ext
=> sub2.sub1.domain.com
安装
# 安装或更新
pip install genpac
# 安装开发版本
pip install https://github.com/JinnLynn/genpac/archive/dev.tar.gz
# 安装服务器组件
pip install genpac[server]
pip install "genpac[server] @ https://github.com/JinnLynn/genpac/archive/dev.tar.gz"
# 卸载
pip uninstall genpac
使用方法
命令行形式
genpac [--version] [--help] [--init [PATH]] [--format FMT] [--output FILE] [--config FILE] [--proxy PROXY] [--gfwlist-url URL]
[--gfwlist-local FILE] [--gfwlist-update-local] [--gfwlist-disabled] [--gfwlist-decoded-save FILE] [--user-rule RULE]
[--user-rule-from FILE] [--template FILE] [--etag-cache] [--pac-proxy PROXY] [--pac-precise] [--pac-compress]
[--dnsmasq-dns DNS] [--dnsmasq-ipset IPSET] [--dnsmasq-nftset NFTSET] [--v2ray-proxy TAG] [--v2ray-direct TAG]
[--v2ray-default TAG] [--v2ray-format {json,yaml}] [--ip-cc CC] [--ip-family {4,6,all}] [--ssacl-geocn] [--list-raw]
[--qtx-no-direct] [--qtx-no-final] [--copy-source SRC] [--shadowrocket-policy POLICY] [--shadowrocket-no-direct]
[--shadowrocket-no-final] [--shadowrocket-set] [--surge-policy POLICY] [--surge-no-direct] [--surge-no-final] [--surge-set]
[--wingy-adapter-opts OPTS] [--wingy-rule-adapter-id ID]
获取gfwlist生成多种格式的翻墙工具配置文件, 支持自定义规则
options:
--version, -v 版本信息
--help, -h 帮助信息
--init [PATH] 初始化配置和用户规则文件
通用参数:
--format FMT, -f FMT 生成格式, 只有指定了格式, 相应格式的参数才可用
可选: pac,dnsmasq,v2ray,ip,ssacl,list,qtx,copy,shadowrocket,surge,wingy,potatso
--output FILE, -o FILE
输出到文件, 无此参数或FILE为-, 则输出到stdout
--config FILE, -c FILE
从文件中读取配置信息
--proxy PROXY 在线获取外部数据时的代理, 如果可正常访问外部地址, 则无必要使用该选项
格式: [PROTOCOL://][USERNAME:PASSWORD@]HOST:PORT
其中协议、用户名、密码可选, 支持协议: http socks5 socks4 socks 如:
http://127.0.0.1:8080
SOCKS5://127.0.0.1:1080
SOCKS5://username:password@127.0.0.1:1080
--gfwlist-url URL gfwlist网址,无此参数或URL为空则使用默认地址, URL为-则不在线获取
--gfwlist-local FILE 本地gfwlist文件地址, 当在线地址获取失败时使用
--gfwlist-update-local
当在线gfwlist成功获取且--gfwlist-local参数存在时, 更新gfwlist-local内容
--gfwlist-disabled 禁用gfwlist
--gfwlist-decoded-save FILE
保存解码后的gfwlist, 仅用于测试
--user-rule RULE 自定义规则, 允许重复使用或在单个参数中使用`,`分割多个规则,如:
--user-rule="@@sina.com" --user-rule="||youtube.com"
--user-rule="@@sina.com,||youtube.com"
--user-rule-from FILE
从文件中读取自定义规则, 使用方法如--user-rule
--template FILE 自定义模板文件
--etag-cache 获取外部文件时是否使用If-None-Match头进行缓存检查
PAC:
通过代理自动配置文件(PAC)系统或浏览器可自动选择合适的代理服务器
--pac-proxy PROXY 代理地址, 如 SOCKS5 127.0.0.1:8080; SOCKS 127.0.0.1:8080
--pac-precise 精确匹配模式
--pac-compress 压缩输出
DNSMASQ:
Dnsmasq配合iptables/ipset、nftables/nftset可实现基于域名的透明代理
--dnsmasq-dns DNS 生成规则域名查询使用的DNS服务器,格式: HOST#PORT
默认: 127.0.0.1#53
--dnsmasq-ipset IPSET
使用ipset, 允许重复或使用`,`分割多个,
如: GFWLIST,GFWLIST6
--dnsmasq-nftset NFTSET
使用ntfset, 允许重复或使用`,`分割多个,
如: 4#inet#TABLE#GFWLIST,6#inet#TABLE#GFWLIST6
V2RAY:
V2Ray的路由规则
--v2ray-proxy TAG 代理标签,默认: proxy
--v2ray-direct TAG 直连标签,未指定则不输出直连规则
--v2ray-default TAG 默认标签,未指定则不输出默认规则
--v2ray-format {json,yaml}
输出格式,默认: json
IP:
国别IP地址列表
--ip-cc CC 国家代码(ISO 3166-1) 默认: CN
--ip-family {4,6,all}
IP类型 可选: 4, 6, all 默认: 4
SSACL:
Shadowsocks访问控制列表
--ssacl-geocn 国内IP不走代理,所有国外IP走代理
LIST:
与GFWList格式相同的地址列表
--list-raw 明文,不进行base64编码
QTX:
Quantumult X 的分流规则
--qtx-no-direct 不包含直连规则
--qtx-no-final 不包含FINAL规则
COPY:
IP地址列表
--copy-source SRC 来源, 网址或文件路径
SHADOWROCKET:
Shadowrocket(小火箭)代理规则
--shadowrocket-policy POLICY
代理规则策略: 默认: PROXY
--shadowrocket-no-direct
不包含直连规则
--shadowrocket-no-final
不包含FINAL规则
--shadowrocket-set 输出为规则集
SURGE:
Surge代理规则
--surge-policy POLICY
代理规则策略: 默认: PROXY
--surge-no-direct 不包含直连规则
--surge-no-final 不包含FINAL规则
--surge-set 输出为规则集
WINGY:
Wingy是iOS下基于NEKit的代理App, 无可用参数
* 注意: 即将废弃 *
--wingy-adapter-opts OPTS
adapter选项, 选项间使用`,`分割, 多个adapter使用`;`分割, 如:
id:ap1,type:http,host:127.0.0.1,port:8080;id:ap2,type:socks5,host:127.0.0.1,port:3128
--wingy-rule-adapter-id ID
生成规则使用的adapter ID
POTATSO:
Potatso2是iOS下基于NEKit的代理App, 无可用参数
* 注意: 即将废弃 *
web服务形式
支持以web形式自动生成及输出:
# 安装服务组件
pip install genpac[server]
pip install "genpac[server] @ https://github.com/JinnLynn/genpac/archive/dev.tar.gz"
# 本地运行
genpac.server --config="/PATH/TO/CONFIG/FILE"
# Docker 运行
# 测试
docker run --rm -p 8000:8000 jinnlynn/genpac
# 自定义配置文件
docker run --rm -p 8000:8000 -v /PATH/TO/CONFIG/FILE:/app/etc/config.ini jinnlynn/genpac
配置参考见example/server/config.ini
配置文件
支持通过 --config
参数读入配置信息,配置文件书写方法可参考example/config.ini
自定义规则
支持通过 --user-rule
自定义单个规则或 --user-rule-from
读入自定义规则文件,这两个参数均可重复使用。
自定义规则文件可参考example/user-rules.txt
自定义规则的语法与gfwlist相同,使用AdBlock Plus过滤规则( http://adblockplus.org/en/filters ),简述如下:
- 通配符支持,如
*.example.com/*
实际书写时可省略*
为.example.com/
- 正则表达式支持,以
\
开始和结束,如\[\w]+:\/\/example.com\\
- 例外规则
@@
,如@@*.example.com/*
满足@@
后规则的地址不使用代理 - 匹配地址开始和结尾
|
,如|http://example.com
、example.com|
分别表示以http://example.com
开始和以example.com
结束的地址 ||
标记,如||example.com
则http://example.com https://example.com ftp://example.com
等地址均满足条件- 注释
!
如! Comment
配置自定义规则时需谨慎,尽量避免与gfwlist产生冲突,或将一些本不需要代理的网址添加到代理列表
规则优先级从高到底为: user-rule > user-rule-from > gfwlist
FAQ
-
出现
fetch gfwlist fail.
错误gfwlist是在线获取,某些情况下可能被和谐或其它原因导致获取失败,可以通过以下几种方法解决该问题:
- 使用
--proxy
参数,通过代理获取gfwlist - 通过其它方式下载到本地,再通过
--gfwlist-local
加载 - 使用参数
--gfwlist-url=-
不进行在线获取,这种情况下你只能使用自定义规则
- 使用
-
gfwlist获取代理使用失败
- 检查--proxy参数或配置proxy值是格式否符合
PROTOCOL://HOST:POST
,如socks5://127.0.0.1:1080、http://127.0.0.1:8080
- OSX Linux如果存在http_proxy、https_proxy环境变量,代理可能无法正常使用
- 检查--proxy参数或配置proxy值是格式否符合
-
PAC格式中,参数
--pac-precise
的精确匹配模式的作用是什么?1.4.0之后生成的PAC文件默认只对域名进行匹配,如规则
.ftchinese.com/channel/video
处理后为ftchinese.com
,所有在ftchinese.com
下的网址都将通过匹配,在这种模式下可以减少PAC文件尺寸,并在一定程度上提高效率,推荐使用,但如果你依然想用原有的规则进行精确的网址匹配判断,则使用参数--pac-precise
或在配置文件中设置pac-precise=true
即可。 -
genpac命令未找到
可能是因为
genpac
命令没有被安装到系统路径,如Ububtu 16.04且通过apt-get安装的pip的环境下,genpac
执行入口文件被安装到了~/.local/bin
,遇到这种情况,将~/.local/bin
添加到系统路径,或卸载重新使用sudo安装,都可以解决问题。
示例
# 从gfwlist生成代理信息为SOCKS5 127.0.0.1:1080的PAC文件
genpac --format=pac --pac-proxy="SOCKS5 127.0.0.1:1080; DIRECT"
# 从~/config.ini读取配置生成
genpac --config=~/config.ini
# PAC格式 压缩
genpac --format=pac --pac-proxy="SOCKS5 127.0.0.1:1080" --pac-compress
# PAC格式 精确匹配模式
genpac --format=pac --pac-proxy="SOCKS5 127.0.0.1:1080" --pac-precise
# PAC格式 自定义规则
genpac --format=pac --pac-proxy="SOCKS5 127.0.0.1:1080" --user-rule="||example.com" --user-rule-from=~/user-rule.txt
# PAC格式 多个自定义规则文件
genpac --format=pac --pac-proxy="SOCKS5 127.0.0.1:1080" --user-rule="||example.com" --user-rule="||example2.com" --user-rule-from=~/user-rule.txt,~/user-rule2.txt
# PAC格式 使用HTTP代理127.0.0.1:8080获取在线gfwlist文件
genpac --format=pac --pac-proxy="SOCKS5 127.0.0.1:1080" --proxy="http://127.0.0.1:8080"
# PAC格式 如果在线gfwlist获取失败使用本地文件,如果在线gfwlist获取成功更新本地gfwlist文件
genpac --format=pac --pac-proxy="SOCKS5 127.0.0.1:1080" --gfwlist-local=~/gfwlist.txt --update-gfwlist-local
# PAC格式 忽略gfwlist,仅使用自定义规则
genpac --format=pac --pac-proxy="SOCKS5 127.0.0.1:1080" --gfwlist-disabled --user-rule-from=~/user-rule.txt
genpac --format=pac --pac-proxy="SOCKS5 127.0.0.1:1080" --gfwlist-url=- --user-rule-from=~/user-rule.txt
# 其它输出格式同样可以使用上述PAC格式中关于gfwlist和自定义规则的参数
# DNSMASQ
genpac --format=dnsmasq --dnsmasq-dns="127.0.0.1#5353" --dnsmasq-ipset="SET_NAME"
genpac --format=dnsmasq --dnsmasq-dns="127.0.0.1#5353" --dnsmasq-nftset="4#inet#TABLE#GFWLIST,6#inet#TABLE#GFWLIST6"
genpac --format=dnsmasq --dnsmasq-nftset="4#inet#TABLE#GFWLIST,6#inet#TABLE#GFWLIST6"
# V2RAY
genpac --format=v2ray --v2ray-proxy-tag="proxy"
genpac --format=v2ray --v2ray-proxy-tag="proxy" --v2ray-direct-tag="direct"
genpac --format=v2ray --v2ray-proxy-tag="proxy" --v2ray-format="yaml"
# IP
genpac --format=ip --ip-cc="cn" --ip-family="all"
genpac --format=ip --ip-cc="us" --ip-family="6"
# Shadowrocket
genpac --format=shadowrocket --shadowrocket-policy="PROXY"
# Surge
genpac --format=surge --surge-policy="PROXY"
# ...
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file genpac-3.0.1.tar.gz
.
File metadata
- Download URL: genpac-3.0.1.tar.gz
- Upload date:
- Size: 74.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.12.4
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 9742d274dc7f72105c27cf7cec2699a215ce747a53e724f93f220ffe84119d32 |
|
MD5 | 3b938c2cd2e3dcad6825a3ab46897782 |
|
BLAKE2b-256 | b0abae9473d43fd2f226fa70d6c4cc356c596b2304b7007e21ba6b52884fc504 |
File details
Details for the file genpac-3.0.1-py3-none-any.whl
.
File metadata
- Download URL: genpac-3.0.1-py3-none-any.whl
- Upload date:
- Size: 81.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.12.4
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 7663e57cd47e64b35ba8b901c163a3f5edef8136e838b4b8bf552a51d14128df |
|
MD5 | 731aeda08af9a60f09c027787d72edbb |
|
BLAKE2b-256 | 1d9eb8b4384d3f3cfdaaca69f0d4cdc12cad740540038555c00596df34d5b001 |