Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Избавление от антивирусного предупреждения: использование `getaddrinfo` вместо `GetHostByName` для получения IP-адреса в Delphi и Pascal <|eot_id|>

Delphi , Интернет и Сети , Сокеты

Избавление от антивирусного предупреждения: использование getaddrinfo вместо GetHostByName для получения IP-адреса в Delphi и Pascal

Разработчики, работающие с языками программирования Delphi и Pascal, иногда сталкиваются с проблемами, связанными с безопасностью и антивирусной защитой. В частности, использование функции GetHostByName для получения IP-адреса по имени хоста может вызвать ложное срабатывание антивирусной программы Kaspersky Internet Security 2013, которая обнаруживает попытку создания ключа в реестре HKLM\SYSTEM\CONTROLSET001\SERVICES\TCPIP\PARAMETERS. Это может привести к проблемам, если у пользователя нет прав администратора. В этом случае использование функции GetHostByName становится невозможным.

Альтернативный способ получения IP-адреса

Для решения этой проблемы можно использовать функцию getaddrinfo, которая не вызывает изменений в реестре и, соответственно, не приводит к срабатыванию антивирусного ПО. Пример кода на Object Pascal (Delphi) для использования getaddrinfo:

program Project2;
{$APPTYPE CONSOLE}
uses
  Winsock;

type
  PAddrInfo = ^TAddrInfo;
  TAddrInfo = packed record
    ai_flags: Integer;
    ai_family: Integer;
    ai_socktype: Integer;
    ai_protocol: Integer;
    ai_addrlen: LongWord;
    ai_canonname: array of Char;
    ai_addr: PSOCKADDR;
    ai_next: PAddrInfo;
  end;

function getaddrinfo(const nodename: PChar; const servname : PChar; const hints: PAddrInfo; var res: PAddrInfo): Integer; stdcall; external 'ws2_32.dll' name 'getaddrinfo';
procedure freeaddrinfo(ai: PAddrInfo); stdcall; external 'ws2_32.dll' name 'freeaddrinfo';

var
  DummyWSA: WSADATA;
  SocketHint, SocketResult: PAddrInfo;

begin
  if WSAStartup($0202, DummyWSA) = 0 then
  begin
    // Инициализация структуры для подсказок
    SocketHint := nil; // Можно использовать заполненную структуру для более точных подсказок
    getaddrinfo('localhost', nil, SocketHint, SocketResult);
    // Обязательно освободить память, выделенную функцией getaddrinfo
    freeaddrinfo(SocketResult);
  end;
  Readln;
end.

Важно отметить, что использование getaddrinfo позволяет поддерживать работу с IPv6, что делает этот метод более предпочтительным для современных приложений.

Проблема с Kaspersky Internet Security 2013

Использование getaddrinfo не приводит к записи в реестр, что исключает конфликт с Kaspersky Internet Security 2013. Однако, стоит отметить, что проблема с GetHostByName может быть связана с внешним кодом, который перехватывает вызов этой функции. Это можно проверить, используя инструменты для мониторинга реестра, такие как Process Monitor.

Поддержка Windows 2000

Если необходимо поддержка Windows 2000, стоит учесть, что getaddrinfo доступен начиная с Windows Vista. Для более старых версий операционной системы можно использовать альтернативные подходы, например, с помощью Winsock API.

Заключение

При использовании функций для работы с сетью важно учитывать совместимость с различными версиями операционных систем и избегать действий, которые могут привести к срабатыванию антивирусного ПО. В данном случае, переход на использование getaddrinfo позволяет решить проблему с Kaspersky Internet Security 2013 и поддерживает современные стандарты работы с сетью.

Создано по материалам из источника по ссылке.

Разработчики языков Delphi и Pascal сталкиваются с антивирусным предупреждением при использовании функции `GetHostByName` и ищут решение, предлагая использовать `getaddrinfo` для получения IP-адреса без изменения реестра.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Сокеты ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-02-05 07:51:40/0.0054259300231934/1