【问题标题】:Change IP via C++通过 C++ 更改 IP
【发布时间】:2018-05-31 08:32:40
【问题描述】:

我尝试通过 C++ 以编程方式更改我的 IP 地址。也许这是不可能的?我找到了这个代码++:

bool MyMethod(char oldIPAddress[], char newIPAddress[], char newMaskAddress[])
{
    DWORD dwRetVal = 0;
    PIP_ADAPTER_INFO pAdapter = NULL;

    ULONG ulOutBufLen = sizeof(IP_ADAPTER_INFO);
    PIP_ADAPTER_INFO pAdapterInfo = (IP_ADAPTER_INFO *)malloc(sizeof(IP_ADAPTER_INFO));
    if (pAdapterInfo == NULL)
    {
        return false;
    }

    if (GetAdaptersInfo(pAdapterInfo, &ulOutBufLen) == ERROR_BUFFER_OVERFLOW)
    {
        free(pAdapterInfo);
        pAdapterInfo = (IP_ADAPTER_INFO *)malloc(ulOutBufLen);
        if (pAdapterInfo == NULL)
        {
            return false;
        }
    }

    if ((dwRetVal = GetAdaptersInfo(pAdapterInfo, &ulOutBufLen)) == NO_ERROR)
    {
        pAdapter = pAdapterInfo;
        while (pAdapter)
        {
            if (strcmp(oldIPAddress, pAdapter->IpAddressList.IpAddress.String) == 0)
            {
                IPAddr addr = inet_addr(newIPAddress);
                IPMask mask = inet_addr(newMaskAddress);
                ULONG context, instance;

                if (DeleteIPAddress(pAdapter->IpAddressList.Context) != NO_ERROR
                    || AddIPAddress(addr, mask, pAdapter->Index, &context, &instance) != NO_ERROR)
                {
                    return false;
                }
                return true;  // not return true
            }
            pAdapter = pAdapter->Next;
        }
        return false;   // return false  here
    }
};

程序正在编译和运行,没有异常,但 MyMethod 总是返回 false。如果我使用 cmd>ipconfig - IP 地址仍然旧。我的错误在哪里?

【问题讨论】:

  • 你是否调试过代码并检查它返回 false 的位置?
  • 它返回false,因为它失败了,你为什么期望cmd>ipconfig - IP返回除了旧地址之外的任何东西?
  • 另外,为什么这不会给您警告,方法可能不会在所有情况下返回 bool
  • @Philipp 它必须在这里返回true - if (DeleteIPAddress(pAdapter->IpAddressList.Context) != NO_ERROR 但这不会发生

标签: c++ windows networking


【解决方案1】:

上述方法的替代方法是从命令外壳调用netsh 命令。

设置 IP 和网络掩码的语法是:

netsh interface ipv4 set address name="YOUR INTERFACE NAME" static IP_ADDRESS SUBNET_MASK GATEWAY

接口名称可以按照你所说的从ipconfig命令中获取。

将上面的netsh 命令填入带有所需接口名称、IP 和网络掩码参数的字符串,并使用system(commandString); 执行命令字符串中的命令。

【讨论】:

  • 它工作得很好,但是当我更改 IP 地址时,我的互联网连接丢失了。我能做些什么来预防?
  • 您可以在互联网上使用的 IP 地址和网络掩码是什么?您设置的导致连接断开的设置是什么?
  • 另外,如果你能说出你想要达到的目标,你可以获得更好的帮助。
猜你喜欢
  • 1970-01-01
  • 2010-09-09
  • 2019-07-29
  • 1970-01-01
  • 2016-05-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-09
相关资源
最近更新 更多