我正在尝试编写一个程序,它将根据命令切换所选适配器的IP。
为此,我使用GetAdaptersInfo()函数来获取适配器的索引及其IP上下文,然后使用它来删除当前的IP(通过DeleteIPAddress(context))。
之后,新IP将通过AddIPAddress()插入。
问题是,当尝试删除“默认”IP(未由AddIPAddress()设置的IP)并在删除旧IP之前调用AddIPAddress时,对DeleteIPAddress函数的调用失败,只是让适配器有两个不同的同时IP
DeleteIPAddress函数失败,错误31(连接到系统的设备无法运行)。
是否有其他方法可以成功更改适配器上的IP地址? DeleteIPAddress实际上是否可用而无需从AddIPAddress获取上下文?
答案 0 :(得分:1)
他们说,DeleteIPAddress删除以前由AddIPAddress添加的地址:-) 我根据兴趣做了一些研究......
有无证件SetAdapterIPAddress
功能。
DWORD SetAdapterIpAddress( char *pszAdapGUID,
DWORD dwDHCP,
DWORD dwIP,
DWORD dwMask,
DWORD dwGateway );
它可能工作与否:-)
还有WMI接口。请参阅Win32_NetworkAdapterConfiguration
课程。
Windows注册表中有一条记录用于NIC IP地址...
我认为,复杂性是在Windows中存在许多“内部”配置代理(DHCP,其他......)并且它们都是操作系统的内部部分,然后当它们操纵ip地址时,其他操作就出来了控制可能会破坏他们的工作。还有可能在注册表中分配静态IP地址,也不应该破坏它。然后你真的有你之前添加的DeleteIPAddress ...我想,它适用于你自己的动态配置代理......
如果你对其他代理的工作不满意,你应该关闭它们(而不是操纵控制下的ip地址)......或者通过某些特定的API来控制它们......或者设置静态IP ... < / p>