2013年前半年搞Scrum,工作忙了不少,但是却是瞎忙的多。
持续维护BlackHole
半年时间,github上有了 24 个star,半年来最大的成果。
2013年前半年搞Scrum,工作忙了不少,但是却是瞎忙的多。
持续维护BlackHole
半年时间,github上有了 24 个star,半年来最大的成果。
最近尝鲜试用了一下IntelliJ,使用下来还是比较爽的,最后我这个很少花钱买软件的人,也在oschina上买了个人版。IDE毕竟是码农干活的家伙,想想也值了。使用的时候有一些心得,记录下来。
BlackHoleJ是一个DNS服务器。他的一个功能是,对于它解析不了的DNS请求,它将请求转发到另外一台DNS服务器,然后再将其响应返回给客户端,起到一个DNS代理的作用。
这个功能的实现经历了三个版本,也对应了三个经典的IO模型。
看了别人写的数字总结,自己也来跟风写一个吧。
看了8本书:
《HTTP权威指南》、《UNIX编程艺术》、《程序员的思维修炼》、《软件随想录》、《TCP/IP详解》、《构建高性能Web站点 : 改善性能和扩展规模的具体做法》、《深入Java虚拟机》、《JAVA并发编程实战》
DNS污染是比DNS劫持更加难以防御的一种攻击,受攻击者访问网站时可被导向其他域名,例如某“不存在的网站”被导向了一个“不存在的IP地址”。
DNS污染的原理如下:
DNS查询也是一个经典的请求-回答模式。首先,客户端发起DNS查询,这是一个UDP包。路由器在转发IP包时,对其内容做解析,若发现其是使用53端口的UDP包,并且其内容符合某些特征(普通的DNS请求都是明文),则从旁路直接返回一个伪造的应答,将其应答指向某个特定IP。因为这个返回速度非常快,所以先于正常请求到达客户端。而客户端收到一个返回包,就认为得到了答案,不再继续接收,而正确的请求结果就被忽略了!
时隔一个月,再次迎来更新!
过年的时候产生了一个想法,解决DNS劫持和DNS污染的问题:
收集一些可靠DNS服务器列表,使用同一个本地端口向这些服务器挨个发送请求,同时监听这个端口的返回包。拿到第一条返回包作为结果返回,并且继续监听,收集所有返回包,做为判定DNS劫持和DNS拦截的依据,最终将正确结果缓存。实现的方式是NIO,复用DatagramChannel。
经过测试,gfw在实现DNS污染的同时,不会丢弃掉回包,因此此方案是可行的,而且比起UDP转TCP的方式,理论上速度会快很多。
听说最近VPN封的厉害,都改用ssh翻墙了。在Mac下实验了一把,总算鼓捣成功。总结如下:
最近公司在做一个邮件系统的项目,涉及到测试对外发送的环节。开始构思是这样:建立一个接收服务器,并将所有请求导向该服务器。这里面就涉及到一个DNS拦截的问题。这个问题其实在开发和测试环境中很常见,但是单是绑hosts或者使用传统DNS都不太能满足需要(不支持通配符)。
后来调研DNS工具也烦了,于是想自己写一个,实现简单的功能。找到一个Java的开源项目EagleDNS看了下,把UDP连接模块看了看,发现还是比较简单的。于是就构思着开发一个简单的DNS服务器吧!
【引自等你 我的朋友的博客】作为一个合格程序员每天该做的事