Программирование на C++ глазами хакера



             

Изменение IP-адреса - часть 2


if ((pAdapterInfo = (PIP_ADAPTER_INFO) GlobalAlloc(GPTR, iAdapterInfo)) == NULL) { AfxMessageBox("Memory allocation error\n"); return; }

if (GetAdaptersInfo(pAdapterInfo, &iAdapterInfo) != 0) { AfxMessageBox("GetAdaptersInfo failed"); return; }

pAdapter = pAdapterInfo; lAdapters.AddString("======================"); while (pAdapter) { Str="Adapter: "; lAdapters.AddString(Str+pAdapter->AdapterName);

char s[20]; Str=itoa(pAdapter->Index, s, 10); Str="Index: "+Str; lAdapters.AddString(Str);

PIP_ADDR_STRING chAddr = &(pAdapter->IpAddressList); while(chAddr) { lAdapters.AddString("------------------------------");

Str=itoa(chAddr->Context, s, 10); Str="Context: "+Str; lAdapters.AddString(Str);

Str="IP Address: "; lAdapters.AddString(Str+chAddr->IpAddress.String);

Str="Subnet Mask: "; lAdapters.AddString(Str+chAddr->IpMask.String);

chAddr = chAddr->Next; } pAdapter = pAdapter->Next; }

}

Вся информация об адресах получена так же, как и в разд. 5.1, с помощью функции GetAdaptersInfo. Напомню, что в качестве первого параметра нужно указать структуру типа PIP_ADAPTER_INFO. В этой структуре в параметре Index хранится индекс сетевого устройства, который надо будет указывать в качестве третьего параметра функции AddIPAddress при добавлении нового IP, а в параметре IpAddressList — массив из структур типа PIP_ADDR_STRING. В этой структуре нас интересует параметр Context, в котором хранится контекст IP-адреса. В параметре IpAddress хранится адрес, а в IpMask находится маска сети.

По нажатию кнопки Change IP добавляется новый адрес для сетевого адаптера. Можно перед добавлением найти и удалить все уже существующие адреса, а потом присоединить новый. Пример кода, который должен выполнятся по нажатию этой кнопки, приведен в листинге 5.3.

Листинг 5.3. Добавление нового адреса для первого сетевого адаптера в системе

void CChangeIPAddressDlg::OnBnClickedButton1() { PIP_ADAPTER_INFO pAdapterInfo, pAdapter; ULONG iAdapterInfo; int iErr; ULONG iInst, iContext; iInst=iContext=0;




Содержание  Назад  Вперед