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

2014-06-22 09:40:25 +08:00
 scarecrow
java ,c代码的简单实现 展示DNS污染的原理.

http://examplecode.github.io/tools/2014/06/20/the-tools-prevent-dns-cache-pollution/
9279 次点击
所在节点    程序员
24 条回复
awanabe
2014-06-22 09:43:22 +08:00
LZ
首先, 这个是"防止DNS污染的小工具" 的源码.
JTR
2014-06-22 09:55:26 +08:00
我还以为有人找到GFW本体 看到代码了。。
EPr2hh6LADQWqRVH
2014-06-22 10:51:40 +08:00
哈哈哈
ovear
2014-06-22 10:58:38 +08:00
我跟lz说一下我的原理吧。
lz这个有点复杂,首先检测ip是不靠谱的gfw经常返回一些奇怪的ip
我的方式是向一个境外的fake dns查询某个域名,这个fake_dns本来是不会返回ip的,如果 返回的,则认为这个域名是被污染的,然后才忽略第一个包。
源码的话。。我回家找一找=。=
jings
2014-06-22 12:18:44 +08:00
查找根域名服务器时就开始污染了
shoumu
2014-06-22 12:38:01 +08:00
解析出来的ip还是不能够访问啊
clowwindy
2014-06-22 13:29:47 +08:00
把楼主的原型实用化了,做了一个 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
2014-06-22 13:50:31 +08:00
@clowwindy 这就是DNSCrypt的功能吧
clowwindy
2014-06-22 13:56:34 +08:00
@luzhaohui DNSCrypt 需要服务器。
churchmice
2014-06-22 16:41:42 +08:00
@shoumu DNS污染只是GFW的一种策略,还有诸如封IP,关键字过滤
ovear
2014-06-22 17:50:02 +08:00
@clowwindy 我是通过tcp查询的,同时查tcp和udp两种,如果fake dns返回了结果,就直接忽略udp的结果。或者设定一个很小的ttl。
一种机器学习策略吧~
clowwindy
2014-06-22 18:53:35 +08:00
@ovear fake dns 是一个不存在的服务器?
kfll
2014-06-22 19:23:03 +08:00
@clowwindy http://gfwrev.blogspot.com/2009/11/gfwdns.html

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

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

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

@cj1324 嘛。。那就到时候再说。人工调整也不是不可以
scarecrow
2014-06-22 21:26:17 +08:00
@ovear 嗯,这个思路也不错

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

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

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

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

© 2021 V2EX