我正在尝试编写一个程序,该命令将在命令中切换所选适配器的IP。
为此,我正在使用GetAdaptersInfo()函数来获取适配器的索引及其IP上下文,然后使用它来删除当前IP(通过DeleteIPAddress(context))。
之后,将通过AddIPAddress()插入新IP。
问题是,尝试删除“默认” IP(未由AddIPAddress()设置的IP)并在删除旧IP之前调用AddIPAddress时,对DeleteIPAddress函数的调用失败,只是使适配器具有两个不同的同时IP。
DeleteIPAddress函数失败,并显示错误31(连接到系统的设备无法运行)。
有没有其他方法可以成功更改适配器上的IP地址?在没有从AddIPAddress获取上下文的情况下,DeleteIPAddress实际上可用吗?
最佳答案
他们说,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 ...