本文系转载,原文地址:http://is.gd/A5YGIt
起因是我这(beijing urban network co. ltd)把DNS服务器改为8.8.8.8或者8.8.4.4的时候就无法使用了,表现为发出DnsQuery后没有任何响应,猜测大概是GFW搞的鬼吧。唔。。。不管是不是反正这黑锅都让GFW来背,呵呵。
默认情况下Windows的DNS交互使用UDP协议承载,于是抱着试试的心理尝试了一下用TCP来发送DNS请求,结果Google DNS很给力的返回了结果。
接下来的工作就是怎样让Windows用TCP来发送了。悲催的是翻了一遍组策略,网络连接属性等等都没找到哪个选项可以让Windows发送TCP的DNSQuery,也不知道是真没有还是没找到。没办法只好自己动手丰衣足食啦,分析后发现判断用UDP或TCP的关键位置在DnsApi.dll中,修改之,覆盖,重启,用Wireshark看到发送的都是TCP的DNS请求,目前除了nslookup工具,其他使用一切正常,用nslookup发出的请求不受影响,默认还是UDP的,反正不影响上网,无视了。
提一下用的系统是Win7 Ultimate X86,版本号 6.1.7601
DnsApi.dll版本号为6.1.7601.17570
.text:6DC08FC8 8B 46 10 mov eax, [esi+10h] .text:6DC08FCB 89 45 F4 mov [ebp+var_C], eax 关键代码,此处让var_C值为2即可,这里给出我的修改方法 85A0: 90 90 90 90 90 -> 33 C0 40 EB 25 85C8: 8B 46 10 -> EB D6 40