撸了一个 gfwlist -> pac 的工具, 纯 shell 版

2014-11-15 17:27:07 +08:00
 hourui
欢迎交流
https://github.com/cuber/gfwlist2pac-shell

就是对 @clowwindy https://github.com/clowwindy/gfwlist2pac python 版的一个纯 shell 搬运

Btw, @clowwindy 的这个 pac 实现, 时间复杂度是 O(1), 强烈建议各位使用 pac 的小伙伴升级到这个版本
3148 次点击
所在节点    程序员
11 条回复
lsylsy2
2014-11-15 19:05:52 +08:00
首先感谢一下;
然后不太熟悉PAC,问一个问题,顺便 @clowwindy
在PAC里看到使用字符串处理找两个点,之后的部分没有看懂;
比如我的列表里同时有google.com.hk与google.com,当我请求google.com.hk的时候,程序是如何决定在表里查询“com.hk”字符串还是“google.com.hk”这样一个三段字符串的呢?
Slienc7
2014-11-15 19:40:03 +08:00
Pandafan的js版:https://www.pandafan.org/pac/index.html
注:自带的生成是白名单
hourui
2014-11-15 19:42:30 +08:00
@lsylsy2 因为google已经几乎都躺枪了,pac里额外对Google相关域名加一条正则就行了,不需要配置某个特定域
lsylsy2
2014-11-15 19:50:21 +08:00
@hourui 谷歌只是举个例子,就是说aaa.com.hk和bbb.com,是如何判断的
breakwa11
2014-11-15 20:07:23 +08:00
@xgowex https://github.com/breakwa11/gfw_whitelist/blob/master/proxy.pac
自带黑白名单和IP地址匹配,精度比纯白名纯黑名单高不少,且效率非常好
yuhaaitao
2014-11-15 21:55:16 +08:00
这个有什么区别?
clowwindy
2014-11-16 03:47:02 +08:00
貌似你没有实现 tld 过滤和子域去重哦
LazyZhu
2014-11-16 04:05:32 +08:00
@breakwa11 你贴的那个pac效率和clowwindy的gfwlist2pac比如何呢?
vivisidea
2014-11-16 09:28:36 +08:00
@lsylsy2
就是从后面往前截取后缀,一旦匹配就返回代理

例如输入的host是a.b.c.google.com.hk
1. 检查com.hk是否在列表里面
2. 检查google.com.hk是否在列表里面
3. 检查c.google.com.hk是否在列表里面
....
breakwa11
2014-11-16 11:28:37 +08:00
@LazyZhu 域名匹配部分和gfwlist2pac的算法一样,所以时间一样。而IP部分经过了多次改进,现在时间是O(1),100000次执行约100ms,即0.001ms匹配一次,目前是我所能找到的匹配IP的pac实现里最快的
hourui
2014-11-16 18:20:00 +08:00
@clowwindy 谢谢提醒,最新的 commit 里已经加上了。
tld 的 list 我是从
https://publicsuffix.org/list/effective_tld_names.dat
这里下载的
Btw, shell 已经从 bash 换成 zsh 了, zsh 比 bash 强太多了.

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/146741

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX