摘 要:主要论述了如何运用Delphi编程实现自动释放、自动获得本地系统所有动态IP地址,以及在Delphi中如何使用Netsh.exe实用程序更改网络配置信息,并给出了相应的示例程序。
关键词:Delphi,IP地址,Netsh
一、 引言
随着Internet的普及,网络安全问题日益突出,根据国家有关部门的政策,在大多数安全程度要求高的机关单位都建立了物理隔离的内、外网络。在这种环境下,各工作站需在不同网段的内、外网之间频繁切换,这就要求工作站系统的网络配置需要及时更新。另外,随着移动办公的普及,笔记本电脑系统的网络配置同样需要经常改变。Delphi作为最优秀的开发工具,用“Delphi + Windows API”模式可很好地解决这些
问题。
二、原理
IP Helper 是一套用于管理本地网络设置的API(应用
程序编程接口),这些API函数在iphlpapi.dll库文件中被定义。iphlpapi.dll库文件存在于Windows NT4/2000\System32 目录下或Windows 98/Me 的 \System目录。就象在VC中编写头文件一样,在delphi中使用这些API需要进行相应的定义和声明。
一台计算机可能安装一块以上网络适配器或存在Modem,调用GetAdaptersInfo函数可获得当前
计算机网络配置信息。这个函数包含两个参数,第一个参数是用来保存适配器信息的内存缓冲的首地址,而第二个参数是这个缓冲的大小。由于我们事先不知道本地机器上有多少个网络适配器,所以也就没法知道应该分配多大的缓存,好在GetAdaptersInfo函数在缓冲的大小不够时会在第二个参数中填入应该分配的缓冲的大小,因此,就象其它一些函数一样在需要时我们可以两次调用该函数,第一次是获取缓冲区的大小,然后分配这个缓冲以后再次调用它以获得实际的网卡信息。函数定义如下:
function GetAdaptersInfo( pAdapterInfo: PTIP_ADAPTER_INFO;
pOutBufLen: PULONG ): DWORD;
stdcall; external ''IPHLPAPI.DLL'';
函数返回的当前
计算机网络配置信息存在于第一个参数pAdapterInfo指向的IP_ADAPTER_INFO结构,该数据结构是以静态链表的方式组织的。
PIpAdapterInfo = ^TIpAdapterInfo;
TIP_ADAPTER_INFO = record
Next: PIpAdapterInfo; //链表指针域,通过它访问整个静态键表
ComboIndex: DWORD; //保留未用
AdapterName: //网卡名,max_adapter_name_length=256
array [0..MAX_ADAPTER_NAME_LENGTH + 3] of Char;
Description: //对网卡的描述max_adapter_description_length=128
array [0..MAX_ADAPTER_DESCRIPTION_LENGTH + 3] of Char;
AddressLength: UINT; //物理地址的长度
Address: //物理地址,max_adapter_address_length=8每个字节存放一个十六进制的数
array [0..MAX_ADAPTER_ADDRESS_LENGTH - 1] of BYTE;
Index: DWORD; //网卡索引号
Type_: UINT; //网卡类型
DhcpEnabled: UINT; //是否启用了DHCP动态IP分配
CurrentIpAddress: PIP_ADDR_STRING; //当前使用的IP地址
IpAddressList: IP_ADDR_STRING; //绑定到此网卡的IP地址链表
GatewayList: IP_ADDR_STRING; //网关地址链表
DhcpServer: IP_ADDR_STRING; //DHCP服务器地址,只有在DhcpEnabled==TRUE的情况下才有效
HaveWins: BOOL; //是否启用了WINS
PrimaryWinsServer: IP_ADDR_STRING; //主WINS地址
SecondaryWinsServer: IP_ADDR_STRING; //辅WINS地址
LeaseObtained: time_t; //当前DHCP租借获取的时间
LeaseExpires: time_t; //当前DHCP租借失效时间
end;
这些数据就是网络属性→TCP/IP的属性页里的内容。使用这些信息可进行网络配置信息的更改,下面