我正在尝试编写一个程序,该命令将在命令中切换所选适配器的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 ...

10-07 23:26