通過開源程序同時解決DNS劫持和DNS污染的問題

來源: Google Reader  發布時間: 2010-05-20 21:32  閱讀: 780 次  推薦: 0   原文鏈接   [收藏]  

  我們知道,某些網絡運營商為了某些目的,對DNS進行了某些操作,導致使用ISP的正常上網設置無法通過域名取得正確的IP地址。常用的手段有:DNS劫持和DNS污染。關于DNS劫持和DNS污染的區別,請查找相關文章。對付DNS劫持的方法很簡單,只需要把系統的DNS設置改為為國外的DNS服務器的IP地址即可解決。

  但是對于DNS污染,一般除了使用代理服務器和VPN之類的軟件之外,并沒有什么其它辦法。但是利用我們對DNS污染的了解,還是可以做到不用代理服務器和VPN之類的軟件就能解決DNS污染的問題,從而在不使用代理服務器或VPN的情況下訪問原本訪問不了的一些網站。當然這無法解決所有問題,當一些無法訪問的網站本身并不是由DNS污染問題導致的時候,還是需要使用代理服務器或VPN才能訪問的。

  我們知道,DNS污染的數據包并不是在網絡數據包經過的路由器上,而是在其旁路產生的。所以DNS污染并無法阻止正確的DNS解析結果返回,但由于旁路產生的數據包發回的速度較國外DNS服務器發回的快,操作系統認為第一個收到的數據包就是返回結果,從而忽略其后收到的數據包,從而使得DNS污染得逞。而某些國家的DNS污染在一段時期內的污染IP卻是固定不變的,從而可以忽略返回結果是這些IP地址的數據包,直接解決DNS污染的問題。

  在這里我用Java做了一個簡單的小程序并提供源代碼,在本機運行后,就能在沒有代理服務器和VPN的情況下,直接就能解決DNS污染的問題了。如果沒有安裝Java,可以去http://www.java.com/上安裝一個。解開AntiDnsPollution.zip之后,運行filter.bat(Linux用戶請運行filter.sh),等待啟動成功。然后設置系統的DNS服務器的IP地址為127.0.0.1即可。然后打開一個命令行窗口,執行nslookup一些被DNS污染的域名,是不是解析正確了?

  下面說一下這個小程序的具體工作流程:首先程序啟動后,會從文本文件dnsfilter.properties中讀取配制,然后去一個不存在的DNS服務器——但這個IP地址卻是國外的——中進行DNS查詢被劫持的域名,然后返回的IP地址就是被劫持的IP,被記錄下來,之后正常的DNS查詢中,就自動把這些IP地址過濾了。這個程序以后會不定期更新,或許也會出。NET版本,請在我的Google Reader上關注更新。

  對于高級用戶,可以手動用文本編輯器修改配置文件dnsfilter.properties:

  BindToIP:小程序啟動后作為DNS服務期綁定53端口,這里指定綁定的IP地址

  DnsServer:國外的DNS服務器,可以設置為OpenDNS或Google DNS服務器的IP地址

  ResponseTimeout:DNS查詢返回超時的時間(毫秒)

  TestDnsServer:測試DNS服務器,請指定一個不存在的DNS服務期,但要求IP是國外的

  TestRespTimeout:測試DNS服務器的查詢返回超時時間(毫秒),也就是DNS劫持的旁路回復超時時間

  TestCount:測試DNS服務器的次數,為了得到所有被劫持的IP地址,需要一定的測試次數

  小程序的執行文件和源代碼在同一個壓縮包內,請點這里下載(含源代碼)

0
0
 
標簽:DNS
 
 

文章列表

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()