写了Host Switchy小工具

因众所周知的原因,Google的某些SSL服务经常间竭性的抽疯,怎样才能快速发现某SSL已经抽疯并切换至未抽疯的服务,从而不影响到我们使用这些非常优秀的服务呢?

为了解决这个问题我自己用VC写了这个Host Switchy小工具,界面:

功能:
1. 理论上可以添加无数个域名和端口,每个域名可以添后无数个IP。
2. 每隔指定的时间间隔(单位分钟,使用Timer事件)逐一检查表格中所有域名的IP,如果发现某在用IP已经无法连接指定端口则自动选用RTT(Round Trip Time)最小的那个IP。
3. 将选用的IP和域名以hosts指定的格式更新到系统的hosts文件中(Windows系统通常目录SystemDirectory\drivers\etc,其它目录暂不支持)。
4. 可以设成开机自动运行(写键值到HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run)、运行后自动开始。
5. 自动保存配置内容到程序所在目录的HostSwitchy.ini文件,此文件可用于交互(从别人那拿到这个配置文件开始后并不会自动应用选定的IP,可以手工替换配置文件里的“U”成“-”或手工选中某IP点“Switch”菜单)。
6. 可根据连接情况和RTT任意切换IP,但此IP必须是可连接状态(即“V”状态)。

说明:
1. 域名的格式:域名:端口号,省略端口号则默认检查80端口。同一域名不同端口不做检测,但hosts文件并不支持端口,因此后设置的会替换前面的,所以建议同一域名只添加关键端口。
2. IP的格式:暂时只支持IPV4格式xxx.xxx.xxx.xxx
3. IP的测试状态:RTT值|是否端口可连|是否选用,RTT值即使用PING命令得到的time=xxxms对应的值,端口可连接以“V”表示,不可连接以“-”表示,此IP选用以“U”表示,未选用以“-”表示。
4. 在逐一检测过程中界面可能会有短暂不影响的情况,这属于正常情况。
5. 在检测RTT时后台是调用系统的ping.exe工具来获取的(Windows系统通常目录SystemDirectory),如果系统中的此文件不存在将无法测得该值,请自行从别的系统找到此文件放于系统目录下。

想获知某服务的IP可以到Just-Ping网站去输入域名进行PING操作。

本地下载:HostSwitchy

Tags: ,

8 Responses to “写了Host Switchy小工具”

  1. bush说道:

    的確是很便捷的工具,如果可以直接更新真實的IP就更好了。呵呵

    • lordong说道:

      不能那样做的,上回就因提供一个PHP页面代理查找Twitter API的IP地址,结果导致整个IP段被墙,为此我还不少挨骂呢,再也不干这种给GFW“提供信息”的事了,只提供方便,IP来源自己找,呵~

  2. Asher说道:

    求助:XP 下正常,但WIN7 受限用户运行后无法探测到RTT,全部显示为0……

    • lordong说道:

      WIN7要以管理员身体运行才能修改hosts文件,受限用户无法探测RTT怀疑是ping.exe命令找不到或不允许执行。

      • Asher说道:

        是用管理员身份运行的,在Process Explorer 里面也可以看到ping.exe 被反复执行,但结果全部是0。很奇怪,同样的配置文件,在另一台XP 上就是正常的。

        • lordong说道:

          有可能是你Win7的防火墙拦住了ping.exe的执行,你可以试试在命令行下测试一下ping命令,比如:
          C:\>ping -n 2 74.125.235.17
          这个工具里就是使用的上面的格式来获得“Average = xxxms”的结果的。

          • Asher说道:

            应该不是防火墙的原因,防火墙是关着的,ping 命令一直是正常的,我刚也测试了,能得出结果。
            我刚才到管理员账户下运行Host Switchy,还是全部为0.
            也许是WIN7 的PING 和XP 的PING 有不同吧。

            • lordong说道:

              还有一种可能就是WIN7中文版PING的显示内容是中文导致无法找到“Average = xxxms”的结果,改天我找个环境测试一下看看。

Leave a Reply


提醒: 评论者允许使用'@user空格'的方式将自己的评论通知另外评论者。例如, ABC是本文的评论者之一,则使用'@ABC '(不包括单引号)将会自动将您的评论发送给ABC。请务必注意user必须和评论者名相匹配(大小写一致)。