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



             

Изменение IP-адреса


Попытаюсь ответить на часто задаваемый вопрос и объяснить, как программно поменять IP-адрес. Зная, как это делается, легко можно написать программу, которая будет через определенные промежутки времени менять адрес компьютера. Это повысит безопасность компьютера, создав защиту от многих видов атак.

Сетевая карта может иметь несколько адресов одновременно, поэтому есть функции для добавления и удаления адресов. Для добавления воспользуйтесь функцией AddIPAddress, у которой следующие параметры:

  • IP-адрес;
  • маска сети для адреса;
  • индекс адаптера, для которого добавляется адрес;
  • контекст адреса. По своему опыту советую указывать нулевое значение. Контекст будет устанавливаться системой;
  • экземпляр, который чаще всего оставляют нулевым.
  • Рис. 5.З. Окно будущей программы ChangeIPAddress

    Каждый IP-адрес привязывается к определенному адаптеру. Например, если в системе две сетевые карты, то для них будут формироваться две отдельные записи для хранения адреса. Контекст однозначно идентифицирует запись об адресе в системе. Не может быть двух записей с одним и тем же контекстом для одного или разных сетевых адаптеров.

    Зная контекст адреса, вы можете легко удалить адрес с помощью функции DeleteIPAddress, которой нужно передать в качестве единственного параметра именно этот контекст.

    Продемонстрирую все сказанное на примере. Для этого создайте новое приложение MFC Application на основе диалога с именем ChangeIPAddress. На рис. 5.3 показано главное окно будущей программы.

    По нажатию кнопки List adapters информация о сетевых адресах будет получена и выведена в элементе List Box, который растянут вдоль нижней части окна. Код, который должен выполняться по нажатию этой кнопки, приведен в листинге 5.2.

    Листинг 5.2. Вывод информации об установленных адресах
    void CChangeIPAddressDlg::OnBnClickedButton3() { PIP_ADAPTER_INFO pAdapterInfo, pAdapter; ULONG iAdapterInfo; int iErr; CString Str;

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




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