公司、学校、出差,就那么一台本本,每次连网,都得重新设置IP地址,于是想着有没有办法通过设定,自动切换IP。上网一搜,还真不少!

有收钱的,有免费的,还有不少相关的技术文章,作为程序员,也想自己做一个,动起手来!

工具:DELPHI(好像有点过时,可做点界面的工具,快捷方便,从来不曾放弃它!)

操作系统:Windows XP

知识点:XML,netsh ip interface

重要的算法

1)用XMLDocument操作XML文档实现IP配置。
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
– <configures xmlns="本地连接">
– <configure xmlns="单位">
  <ip>192.168.0.35</ip>
  <mask>255.255.255.0</mask>
  <gateway>192.168.0.1</gateway>
  <dns1>172.16.253.250</dns1>
  <dns2>172.16.253.250</dns2>
  </configure>
– <configure xmlns="学校">
  <ip>202.209.11.25</ip>
  <mask>255.255.255.192</mask>
  <gateway>202.209.13.1</gateway>
  <dns1>202.209.11.1</dns1>
  <dns2>202.209.13.1</dns2>
  </configure>
  </configures>
上面所示的是程序用到的配置文件内容,configures是文件的根节点,其命名空间(xmlns)定义了本地连接的名称,每个备用的网络配置通过configure设定,包含ip(ip地址)/mask(子网掩码)/gateway(网关)/dns1(首选DNS)/dns2(备用DNS).每个configure的命名空间为该配置的标题信息,用于界面显示。

2)通过调用系统的netsh命令,实现动态设置IP。
有关netsh命令的介绍,请访问这个地址:http://zhidao.baidu.com/question/18997417.html?si=2

我这里,主要是根据界面配置的IP信息生成.sh文件,然后通过调用netsh exec 命令,应用该文件中的配置,即可实现动态切换IP。
.sh文件的内容为:
int ip
set address 本地连接 source=static addr=202.209.11.25 mask=255.255.255.192
set address 本地连接 gateway = 202.207.13.1 gwmetric = 1
set dns 本地连接 source=static addr=202.207.11.1 register=PRIMARY
add dns 本地连接 addr=202.207.13.1 index=2

注意:netsh的运行目录为用户目录(c:/documents and settings/user/),所以,在调用前,要通过SetCurrentDir设定系统的当前运行目录,.sh文件也要存放在该目录下,以便调用。

界面设计
1)左面显示了可选IP的列表,每一项就是XML文档中configure项的命名空间。
2)右面设计用于显示和编辑IP信息的界面
3)下方为操作按钮,包含Add(将配置好的IP保存到XML文件)、Remove(将选择的IP配置从XML文件中清除)和Apply(应用当前选择的IP配置,实现切换)。

后记
其实,就实现功能的角度,完全没有必要编制程序,我做这样的工作,一方面是出于爱好,另一方面也是为了验证功能。毕竟,图形化的操作还是方便些呀,有机会的话,我会把它放到网上,让大家免费用的。