17 七月, 2006
hosts file doesn't work, 罪魁祸首是MSN Messenger
今天被这个问题浪费了至少1个小时,很生气!这里记下来,希望后来者能节省点时间。
症状:
- ping(或者使用IE, FF访问)一个网址,hosts file不起作用,完全被ignored
- hosts文件的位置正确,entry语法正确,registry中对应的key值("HKEY_LOCAL_MACHINE/System/CurrentControl Set/Services/TCPIP/Parameters/DataBasePath")正确
- 关闭"dns client" service,并重启进入安全模式,依然无法ping通hosts file内的entry
奇怪现象:
- 在你hosts文件所在目录下(xp: %systemroot/system32/drivers/etc),除了hosts file以外,还有一个陌生的hosts.msn文件
直接原因:
- "HKEY_LOCAL_MACHINE/System/CurrentControl Set/Services/TCPIP/Parameters/DataBasePath"的值虽然正确(在xp机器上应该是"%Systemroot%/System32/drivers/etc",表示hosts file的实际路径),但是它的类型(REG_SZ)却是错误的。正确的类型是:REG_EXPAND_SZ,扩展字符串,可以以实际值替换环境变量%systemroot%。而REG_SZ类型的字串则必须指定实际路径,如"C:/windows/system32/drivers/etc"。
解决方法:
- rename (注册表key)DataBasePath
- 新建REG_EXPAND_SZ类型的值"DataBasePath"
- 将原"DataBasePath"值拷贝到新"DataBasePath"内
- 删除原"DataBasePath"
幕后凶手:
- 曾经使用过MSN Messenger 7.0/7.5的“Connection Troubleshooter”或者在安装这两个版本(7.5以上版本未做测试)的Messenger时选择了"automatic scanning and configuration of ports" option
作案过程:
- 保存hosts到新的hosts.msn文件
- 修改注册表值DataBasePath的类型,从可扩展字符串到普通字符串,结果系统无法查找带%号的路径,造成hosts文件失效
作案动机:
- 我不用这个hosts,大家也都别用
- 某些间谍程序和病毒再也没法使用这个hosts作恶了
- 让大家充分认识到注册表值的这两种字符串类型之间的微妙区别
- 一想到会有很多人为此焦头烂额,真开心
- Bill说...
感谢zafar:http://www.mcse.ms/archive62-2006-1-1880791.html
最新回复
发表评论



