V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
hourui
V2EX  ›  程序员

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

  •  1
     
  •   hourui ·
    cuber · 2014-11-15 17:27:07 +08:00 · 3256 次点击
    这是一个创建于 3672 天前的主题,其中的信息可能已经有所发展或是发生改变。
    欢迎交流
    https://github.com/cuber/gfwlist2pac-shell

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

    Btw, @clowwindy 的这个 pac 实现, 时间复杂度是 O(1), 强烈建议各位使用 pac 的小伙伴升级到这个版本
    11 条回复    2014-11-16 18:20:00 +08:00
    lsylsy2
        1
    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
        2
    Slienc7  
       2014-11-15 19:40:03 +08:00 via Android
    Pandafan的js版:https://www.pandafan.org/pac/index.html
    注:自带的生成是白名单
    hourui
        3
    hourui  
    OP
       2014-11-15 19:42:30 +08:00 via iPhone
    @lsylsy2 因为google已经几乎都躺枪了,pac里额外对Google相关域名加一条正则就行了,不需要配置某个特定域
    lsylsy2
        4
    lsylsy2  
       2014-11-15 19:50:21 +08:00
    @hourui 谷歌只是举个例子,就是说aaa.com.hk和bbb.com,是如何判断的
    breakwa11
        5
    breakwa11  
       2014-11-15 20:07:23 +08:00   ❤️ 1
    @xgowex https://github.com/breakwa11/gfw_whitelist/blob/master/proxy.pac
    自带黑白名单和IP地址匹配,精度比纯白名纯黑名单高不少,且效率非常好
    yuhaaitao
        6
    yuhaaitao  
       2014-11-15 21:55:16 +08:00 via Android
    这个有什么区别?
    clowwindy
        7
    clowwindy  
       2014-11-16 03:47:02 +08:00 via Android
    貌似你没有实现 tld 过滤和子域去重哦
    LazyZhu
        8
    LazyZhu  
       2014-11-16 04:05:32 +08:00
    @breakwa11 你贴的那个pac效率和clowwindy的gfwlist2pac比如何呢?
    vivisidea
        9
    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
        10
    breakwa11  
       2014-11-16 11:28:37 +08:00
    @LazyZhu 域名匹配部分和gfwlist2pac的算法一样,所以时间一样。而IP部分经过了多次改进,现在时间是O(1),100000次执行约100ms,即0.001ms匹配一次,目前是我所能找到的匹配IP的pac实现里最快的
    hourui
        11
    hourui  
    OP
       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 强太多了.
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1032 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 19:58 · PVG 03:58 · LAX 11:58 · JFK 14:58
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.