Изменить IP через C ++ - PullRequest
0 голосов
/ 31 мая 2018

Я пытаюсь изменить свой IP-адрес программно, через C ++.Может быть, это невозможно?Я нашел этот код ++:

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-адрес все еще старый.Где моя ошибка?

1 Ответ

0 голосов
/ 31 мая 2018

Альтернативой вышеуказанному методу является вызов команды netsh из командной оболочки.

Синтаксис для установки IP-адреса и маски сети:

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

Имя интерфейса можно получить из команды ipconfig, как вы указали.

Заполните указанную выше команду netsh до строки с требуемыми параметрами имени интерфейса, IP-адреса и маски сети и используйте system(commandString); для выполнения команды вcommandString.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...