摘 要 本文分析了静态分配IP网络中IP分配存在的问题以及解决方案,并介绍了使用WMI技术在Visaul C++环境中的应用程序实现。
关键字 Visual C++ , 静态IP配置,WMI
当前随着网络技术的飞速发展,网络管理也从软件和硬件甚至是网络构架上都有了重大的变革,但是在实际的运用中,还有很多经典的技术继续使用。例如静态分配主机IP地址这一经典局域网地址分配方案仍然在很多的网络构架中延续使用,很多的网管人员仍然在维护着这类的网络,如何轻松的做好静态IP地址分配仍然是一个比较繁琐的工作。笔者在实际的工作中结合单位特点,通过编写客户端软件的方式实现了自动配置主机IP地址。
一、需求分析
笔者在实际工作中发现,虽然在Windows环境中配置静态IP地址对于一个熟悉操作系统的用户非常简单,但是由于以下两点原因使得一般用户很难自行配置一个合法可用的IP地址。
1、由于大多数的用户在家中使用的是xDSL拨号接入网络,因此大多数的普通用户均没有配置过IP地址,甚至对于IP地址的概念都不清楚,那么仅仅通过网管部门的电话指导或者相关宣传手册是不容易让用户完成静态IP地址的配置工作的。
2、在实际的工作中,单位中不同的部门使用的静态IP地址参数是不相同的,除了IP地址不能重复外,不同网段接入的主机可能还要求网管、DNS等参数都不相同,因此,很多情况下需要通过电话联系网管部门,这样造成网管部门大量的人力花在电话指导配置IP地址这样的琐碎小事上,严重影响了网管部门员工的工作积极性。
因此对于网管部门工作而言就希望能够让配置静态IP地址的工作进一步的简单,但对于一台尚未接入网络的主机,任何的网络服务都是不可用的,所以使用独立的客户端软件是解决这类问题的唯一可行的方案。
二、软件设计
在Windows环境中开发应用程序的工具很多,但是考虑到实际应用环境,即,编译后的程序要能够在Windows2000/XP/Vista等平台上无安装绿色运行,那么使用Visual C++ 6.0比较好的选择。
注意:自1998年发布了Visual Studio 6.0至今,微软已经针对Visual Studio 6.0发布了6个补丁包对开发平台进行了更新,并且随着Windows XP等操作系统的更新,随 Visual Studio 6.0发布的API函数库已经不能完全满足当前的开发,因此需要独立安装最新的平台SDK,本设计就是用了Microsoft Platform SDK February 2003这个版本的API作为开发基础库,这也是微软最后一套能够支持Visual C++ 6.0的平台SDK。下载地址:http://www.microsoft.com/msdownload/platformsdk/sdkupdate/psdk-full.htm
1.关键技术分析
在Windows平台中修改指定网卡上的IP地址的方法比较多,但要求不重新启动操作系统的方法主要有以下三种:
1)命令行使用netsh命令
Netsh 是命令行脚本实用工具,它允许从本地或远程显示或修改当前正在运行的计算机的网络配置,因此可以直接使用命令或者实用教本编写网络IP地址修改,例如下面的命令将配置名为“本地连接”的接口,其静态 IP 地址为 10.0.5.99,子网掩码为 255.255.255.0,默认网关为 10.0.5.1。
Netsh set address name="本地连接" source=static addr=10.0.5.99 mask=255.255.255.0 gateway=10.0.5.1
2)使用微软未公开的API进行设置
自从Windows发布以来,微软除了开放了大量的系统API共程序设计者使用,但由于种种问题还有很多API并未正式发布过,其中在Windows2000以后的操作系统中就包含了修改网络适配器的API函数,函数原形如下:
DhcpNotifyConfigChange [DllImport("dhcpcsvc.dll")]
public static extern bool DhcpNotifyConfigChange(
string lpwszServerName, // 本地机器为NULL
string lpwszAdapterName, // 适配器名称
bool bNewIpAddress, // TRUE表示更改IP
long dwIpIndex, // 指明第几个IP地址,如果只有该接口只有一个IP地址则为0
long dwIpAddress, // IP地址
long dwSubNetMask, // 子网掩码
long nDhcpAction ); //对DHCP的操作 0:不修改, 1:启用DHCP,2:禁用DHCP
在C++中通过动态调用DLL中API函数的操作就可以使用了。
|