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

GFW DNS 污染的原理 ,附 JAVA,C 源码实现。

  •  2
     
  •   scarecrow ·
    examplecode · 2014-06-22 09:40:25 +08:00 · 9236 次点击
    这是一个创建于 3568 天前的主题,其中的信息可能已经有所发展或是发生改变。
    24 条回复    2015-08-01 18:12:31 +08:00
    awanabe
        1
    awanabe  
       2014-06-22 09:43:22 +08:00
    LZ
    首先, 这个是"防止DNS污染的小工具" 的源码.
    JTR
        2
    JTR  
       2014-06-22 09:55:26 +08:00
    我还以为有人找到GFW本体 看到代码了。。
    EPr2hh6LADQWqRVH
        3
    EPr2hh6LADQWqRVH  
       2014-06-22 10:51:40 +08:00
    哈哈哈
    ovear
        4
    ovear  
       2014-06-22 10:58:38 +08:00   ❤️ 5
    我跟lz说一下我的原理吧。
    lz这个有点复杂,首先检测ip是不靠谱的gfw经常返回一些奇怪的ip
    我的方式是向一个境外的fake dns查询某个域名,这个fake_dns本来是不会返回ip的,如果 返回的,则认为这个域名是被污染的,然后才忽略第一个包。
    源码的话。。我回家找一找=。=
    jings
        5
    jings  
       2014-06-22 12:18:44 +08:00
    查找根域名服务器时就开始污染了
    shoumu
        6
    shoumu  
       2014-06-22 12:38:01 +08:00
    解析出来的ip还是不能够访问啊
    clowwindy
        7
    clowwindy  
       2014-06-22 13:29:47 +08:00   ❤️ 4
    把楼主的原型实用化了,做了一个 DNS 转发器,启动后把 DNS 改为 127.0.0.1 即可避免 DNS 污染:

    https://github.com/clowwindy/ChinaDNS

    @ovear 光忽略第一个包不够,测试表明 GFW 可能会返回两个假包:

    2014-06-22 12:43:51 INFO request www.facebook.com
    2014-06-22 12:43:51 INFO response www.facebook.com: [('37.61.54.158', 1, 1)]
    2014-06-22 12:43:51 INFO response www.facebook.com: [('59.24.3.173', 1, 1)]
    2014-06-22 12:43:51 INFO response www.facebook.com: [('star.c10r.facebook.com', 5, 1), ('31.13.79.81', 1, 1)]
    luzhaohui
        8
    luzhaohui  
       2014-06-22 13:50:31 +08:00
    @clowwindy 这就是DNSCrypt的功能吧
    clowwindy
        9
    clowwindy  
       2014-06-22 13:56:34 +08:00
    @luzhaohui DNSCrypt 需要服务器。
    churchmice
        10
    churchmice  
       2014-06-22 16:41:42 +08:00
    @shoumu DNS污染只是GFW的一种策略,还有诸如封IP,关键字过滤
    ovear
        11
    ovear  
       2014-06-22 17:50:02 +08:00   ❤️ 1
    @clowwindy 我是通过tcp查询的,同时查tcp和udp两种,如果fake dns返回了结果,就直接忽略udp的结果。或者设定一个很小的ttl。
    一种机器学习策略吧~
    clowwindy
        12
    clowwindy  
       2014-06-22 18:53:35 +08:00
    @ovear fake dns 是一个不存在的服务器?
    kfll
        13
    kfll  
       2014-06-22 19:23:03 +08:00
    @clowwindy http://gfwrev.blogspot.com/2009/11/gfwdns.html

    这有介绍 fake dns 的手段,虽然是用来查 IP 的
    cj1324
        14
    cj1324  
       2014-06-22 19:35:23 +08:00
    @ovear 这个方法不行, 因为dns 污染同时存在保护性的操作。
    比如百度的域名被国外XX组织DNS劫持了。 DNS污染会让你得到正确的IP。 从而正常使用百度。
    ovear
        15
    ovear  
       2014-06-22 19:38:34 +08:00   ❤️ 1
    @clowwindy 恩是的,境外不存在的都行

    @cj1324 那之前baidu就不会大姨妈了,传送门: http://ovear.info/post/13
    clowwindy
        16
    clowwindy  
       2014-06-22 19:42:34 +08:00
    @ovear 有意思的方法,就是会浪费网络资源……
    cj1324
        17
    cj1324  
       2014-06-22 19:44:49 +08:00
    @ovear 就是因为这个件事, GFW才加上保护策略的。
    clowwindy
        18
    clowwindy  
       2014-06-22 20:22:12 +08:00
    @ovear
    @cj1324

    还可以用这个方法 + traceroute 确定 GFW 的位置……
    ovear
        19
    ovear  
       2014-06-22 20:58:38 +08:00   ❤️ 1
    @clowwindy 浪费倒是不会浪费,我是实现的一个标准的dns服务器。有ttl的,本地缓存啥的-0-,而且有机器学习规则,基本上是越多人用,就越快。而且越智能。。(EDNS坑还没坑上。。因为要申请合作,不然就只能盗用其他edns的key。。赶脚不太好)
    另外=。=,这个方法别传太远了。。不然升级就不好使了。。
    其实我还打算做一个公共维护的clean dns cache zone,还可以随时导出hosts啥的 多方便。。重新封装下dns协议也不难,还可以防污染。。算是云起来吧23333
    确定gfw的方法其实可以通过bgp来确定的~可以确定广播域,我记得有一个软件可以看到的~(省市之间都有类似gfw的设备。。总之绝对不是只在出口有)

    @cj1324 嘛。。那就到时候再说。人工调整也不是不可以
    scarecrow
        20
    scarecrow  
    OP
       2014-06-22 21:26:17 +08:00
    @ovear 嗯,这个思路也不错
    scarecrow
        21
    scarecrow  
    OP
       2014-06-22 21:38:49 +08:00
    @ovear 》》浪费倒是不会浪费,我是实现的一个标准的dns服务器

    这东西还是得搞成P2P的,GFW封了你的服务器怎么办
    jsq2627
        22
    jsq2627  
       2014-06-22 21:39:35 +08:00
    @ovear
    ovear 你好,ovear 再见 - -
    我一直以为此 ovear 非彼 ovear。。ping了一下你的博客才发现原来就是你 = =
    今天突然发现我的blog放YunTF首页了,受宠若惊。。我都有好几个月没去维护它啦
    topkings
        23
    topkings  
       2014-11-22 21:38:53 +08:00
    受教
    scarecrow
        24
    scarecrow  
    OP
       2015-08-01 18:12:31 +08:00
    很久远的一个帖子了,看到消息提醒有来到这里,发现我分享文章的链接已经被GFW干掉了。

    http://examplecode.github.io/tools/2014/06/20/the-tools-prevent-dns-cache-pollution/
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   5325 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 05:54 · PVG 13:54 · LAX 22:54 · JFK 01:54
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.