优雅地解决 InternetOpen Failed 错误(12029)


洛英的十年老问题之一,现如今 IE 都无了它还在。
问题描述
错误定位
解决方案
1. 问题描述:
平时某一天,特别是周二更新之后,会有少部分人突然发现客户端上不去了,具体表现为:双击打开客户端 HeroesLauncher.exe 弹窗报错,或者打开 TCGame 无响应。

弹窗大概长这样:


(几年前弹窗长这样:)

这个问题的神奇之处在于,大多数人可以正常上游戏,只有一小部分人会这样报错,而且可能换一个网络/开一个加速器/重启运营商光猫就解决了(当然也有人所有方法都试过也没解决)。
2. 错误定位:
首先观察客户端所给的错误描述,易见,打开客户端或者登录游戏必须首先读取到截图中网址http://mhupdate.tiancity.cn/zh-CN/PatchVersion.txt的内容(几年前则是网址http://heroespatch.mabinogiheroes.com.cn/zh-CN/EndPoint.txt),于是问题归结于为什么部分网络环境无法访问到这个网址。
具体的定位过程省略,经过亿些对比实验,观察发现:
在打开HeroesLauncher.exe弹窗报错的网络A环境下,使用nslookup解析域名mhupdate.tiancity.cn得到的IP地址为:

而在正常登录且正常打开TCGame的网络B环境下,这时候使用nslookup解析域名mhupdate.tiancity.cn得到的IP地址为:

也就是说,报错的网络A环境中,由于某种原因,出现了类似于DNS劫持的现象。然后在优先级最高的本地hosts文件末尾加入死映射

果然可以正常打开客户端

结合之前其他有效过的开加速器/重启光猫之类的解决方案,不难得出结论,每次更新后之所以出现InternetOpen Failed问题,是因为天成更新后域名mhupdate.tiancity.com的IP地址发生更新,而你本地的DNS解析器缓存中的域名对应IP不会自己更新,而我们熟知的是,域名解析流程是本地hosts文件、本地DNS解析器缓存、首选DNS服务器的一个顺序,这就导致更新后你的客户端在连接域名mhupdate.tiancity.com时还是调用DNS解析器缓存中的IP,未能连接DNS服务器获得最新的IP地址。开加速器能更改网络配置得到正确的IP、重启光猫能清除DNS解析器缓存从而访问DNS服务器获得正确的IP,因而都可以解决本问题。而还是解决不了这个问题的玩家,可以尝试终极方案:手动更改hosts配置文件。
3. 解决方案:
首先,当然确保你的网络能正常访问其它网站。如果你打开客户端的时候还没联网,那它肯定给你报InternetOpen Failed。
然后,开加速器和重启光猫什么的当然可以试一下。
最后,终极方案:
打开C:\Windows\System32\drivers\etc
打开hosts(修改hosts文件可以百度教程)
文件末尾添加139.215.251.80 mhupdate.tiancity.cn并保存

重新打开HeroesLauncher.exe,搞定
注意,你的电脑里很可能有某些软件会保护hosts文件,让他恢复备份状态;或者有可能你没有提供管理员权限,无法保存修改状态。请正确操作。
此外,域名mhupdate.tiancity.cn的IP地址可能还会不断更新,当你下一次发现又出现InternetOpen Failed的时候,可以自己手动nslookup一下更新后的IP地址是多少,再去hosts文件里再改一下。
在你正确操作的情况下,如果终级方案仍然没有解决你的问题,那就说明你的InternetOpen Failed错误发生在别的地方。
至此,HeroesLauncher.exe打开报错的问题就彻底解决了。
至于TCGame,在未正确配置的网络环境下,打开连报错都不给,直接无响应,那他验证版本所需要访问的网址是什么就不得而知了。