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

Настройка брандмауэра Windows 7 для портового перенаправления в Delphi: универсальное решение для всех профилей

Delphi , Файловая система , Порты

Настройка брандмауэра Windows 7 для портового перенаправления в Delphi

В данной статье мы рассмотрим, как открыть порт в брандмауэре Windows 7 для портового перенаправления с помощью Delphi, учитывая наличие нескольких профилей (Публичный и Частный). Для начала работы нам потребуется использовать компоненты COM-объекты Windows, которые предоставляют возможности для управления правилами брандмауэра.

Проблема

Пользователи часто сталкиваются с проблемой открытия порта в брандмауэре Windows 7 для использования в приложениях, разработанных с помощью Delphi. Особенностью Windows 7 является наличие нескольких профилей брандмауэра, что требует от разработчика учитывать эту особенность при создании правил.

Решение

Для создания универсального решения, которое будет работать во всех профилях (Публичный и Частный), необходимо использовать объект HNetCfg.FWRule и установить соответствующие свойства для работы в обоих профилях.

Пример кода на Object Pascal (Delphi), который открывает порт в брандмауэре Windows 7:

{$APPTYPE CONSOLE}

uses
  SysUtils,
  ActiveX,
  ComObj,
  Variants;

procedure AddExceptionToFirewall(const Caption, Executable: String; Port: Word);
const
  NET_FW_PROFILE2_DOMAIN = 1;
  NET_FW_PROFILE2_PRIVATE = 2;
  NET_FW_PROFILE2_PUBLIC = 4;
  NET_FW_IP_PROTOCOL_TCP = 6;
  NET_FW_ACTION_ALLOW = 1;
  NET_FW_RULE_DIR_IN = 1;
  NET_FW_RULE_DIR_OUT = 2;
var
  fwPolicy2: OleVariant;
  RulesObject: OleVariant;
  Profile: Integer;
  NewRule: OleVariant;
begin
  Profile := NET_FW_PROFILE2_PRIVATE OR NET_FW_PROFILE2_PUBLIC;
  fwPolicy2 := CreateOleObject('HNetCfg.FwPolicy2');
  RulesObject := fwPolicy2.Rules;
  NewRule := CreateOleObject('HNetCfg.FWRule');
  NewRule.Name := Caption;
  NewRule.Description := Caption;
  NewRule.Applicationname := Executable;
  NewRule.Protocol := NET_FW_IP_PROTOCOL_TCP;
  NewRule.LocalPorts := Port;
  NewRule.Direction := NET_FW_RULE_DIR_OUT;
  NewRule.Enabled := TRUE;
  NewRule.Grouping := 'My Group';
  NewRule.Profiles := Profile;
  NewRule.Action := NET_FW_ACTION_ALLOW;
  RulesObject.Add(NewRule);
end;

begin
  try
    CoInitialize(nil);
    try
      AddExceptionToFirewall('MyAppRule', 'MyApp.exe', 3307);
    finally
      CoUninitialize;
    end;
  except
    on E: EOleException do
      Writeln(Format('EOleException %s %x', [E.Message, E.ErrorCode]));
    on E: Exception do
      Writeln(E.Classname, ':', E.Message);
  end;
  Writeln('Press Enter to exit');
  Readln;
end.

Обратите внимание, что для работы с COM-объектами необходимо использовать CoInitialize и CoUninitialize, а также обрабатывать возможные исключения. Этот код требует повышения привилегий (elevation).

Комментарии пользователя

Пользователи, сталкивающиеся с необходимостью использования "любого" порта (Port "Any"), могут не указывать свойство LocalPorts в коде, и тогда порт будет открыт для всех доступных портов.


Этот пример кода решает проблему открытия порта в брандмауэре Windows 7 для использования в приложениях на Delphi, учитывая все профили брандмауэра.

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

Описание процесса настройки брандмауэра Windows 7 для портового перенаправления в программах, разработанных на Delphi, с учетом различных профилей брандмауэра.


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

Получайте свежие новости и обновления по 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 17:15:05/0.025074005126953/1