DhcpNotifyConfigChange通知IP修改,双IP设置

BOOL DhcpNotifyConfigChange(
    LPWSTR lpwszServerName, // 本地机器为NULL
    LPWSTR lpwszAdapterName, // 适配器名称
    BOOL bNewIpAddress, // TRUE表示更改IP
    DWORD dwIpIndex, // 指明第几个IP地址,如果只有该接口只有一个IP地址则为0
    DWORD dwIpAddress, // IP地址
    DWORD dwSubNetMask, // 子网掩码
    int nDhcpAction ); // 对DHCP的操作 0:不修改, 1:启用 DHCP,2:禁用 DHCP

上面对于DhcpNotifyConfigChange的介绍我是在http://www.vckbase.com/index.php/wv/645上面看到的。

这段时间有个需求就是讲网卡设置成两个IP,接受到修改ip的命令后,将第二个IP设置成另外一个IP,在网上看到的现成的例子都是修改单IP的。

双IP修改和单IP差不多,例如

RegSetValueEx(hKey, "IPAddress", 0, REG_MULTI_SZ, (unsigned char *)mszIPAddress, nIP);
单ip的话mszIPAddress的格式是 “192.168.1.11”+0x00,双IP的话格式是 “192.168.1.11”+0x00+“192.168.1.12”+0x00,字符串之间是以0x00分割的。

开始不知道只是看注册表的键值是换行的形式,试过“192.168.1.11\n192.168.1.12” ....都不行,最后发现是用0x00分割。子网掩码也是一样。

	char mszIPAddress[100];
	char mszNetMask[100];
        int nIP, nMask;
	strncpy(mszIPAddress, "192.168.60.43", 98);//pIPAddress
	strncpy(mszNetMask, "255.255.255.0", 98);//pNetMask
	nIP = strlen("192.168.60.43");
	nMask = strlen("255.255.255.0");

	*(mszIPAddress + nIP + 1) = 0x00;
	strncpy(mszIPAddress+nIP + 1, "10.1.1.83", 30);//pIPAddress
	*(mszIPAddress + nIP+strlen("10.1.1.83") + 2) = 0x00;
	nIP = nIP+strlen("10.1.1.83")  + 3;
	*(mszNetMask + nMask + 1) = 0x00;
	strncpy(mszNetMask+nMask + 1, "255.255.255.0", 30);//pIPAddress
	*(mszNetMask + nMask*2 + 2) = 0x00;
	nMask +=nMask*2 + 3;
        RegSetValueEx(hKey, "IPAddress", 0, REG_MULTI_SZ, (unsigned char *)mszIPAddress, nIP);//第一IP是192.168.60.43第二ip是10.1.1.83
然后就是给系统发送通知消息了,DhcpNotifyConfigChange的使用方法网上很多,就不介绍了,主要说一下参数。

例如,原ip1:192.168.60.43 ip2:192.168.60.83   现在修改成ip1:192.168.60.43 ip2:192.168.60.66,只有ip2修改了,所以
DhcpNotifyConfigChange(NULL, wcAdapterName, TRUE, 1, inet_addr("192.168.60.66"), inet_addr("255.255.255.0"), 0)

我发现如果DhcpNotifyConfigChange(NULL, wcAdapterName, TRUE, 0, inet_addr("192.168.60.43"), inet_addr("255.255.255.0"), 0)的话,也可以达到效果

但是修改之后可以ping通三个地址 192.168.60.43   192.168.60.83  192.168.60.66,已经被修改的192.168.60.83 也可以ping通,这不符合我的要求。

给我的感觉是不管改不改注册表,只要机器不重启,DhcpNotifyConfigChange就可以让一个不存在的IP通信。




上面是我实验的结果,还有好多没有涉及到的情况,只做参考,欢迎讨论指正

猜你喜欢

转载自blog.csdn.net/sstya/article/details/44647615