如何使用Delphi在Win7防火墙中打开端口

2024-04-22

我想在 Windows 7 防火墙中打开一个端口,以便通过 Delphi 进行端口转发,但正如其他线程中所说,Windows 7 在防火墙中有多个配置文件(公共、私有),下一个代码仅向其中之一添加例外。

Code:

procedure addPortToFirewall(EntryName:string;PortNumber:Cardinal); 
Const 
  NET_FW_PROFILE_DOMAIN = 0; 
  NET_FW_PROFILE_STANDARD = 1; 
  NET_FW_IP_VERSION_ANY = 2; 
  NET_FW_IP_PROTOCOL_UDP = 17; 
  NET_FW_IP_PROTOCOL_TCP = 6; 
  NET_FW_SCOPE_ALL = 0; 
  NET_FW_SCOPE_LOCAL_SUBNET = 1;var 
  fwMgr,port:OleVariant; 
  profile:OleVariant; 
begin 
  fwMgr := CreateOLEObject('HNetCfg.FwMgr'); 
  profile := fwMgr.LocalPolicy.CurrentProfile; 
  port := CreateOLEObject('HNetCfg.FWOpenPort'); 
  port.Name := EntryName; 
  port.Protocol := NET_FW_IP_PROTOCOL_TCP; 
  port.Port := PortNumber; 
  port.Scope := NET_FW_SCOPE_ALL; 
  port.Enabled := true; 
  profile.GloballyOpenPorts.Add(port); 
end; 

我知道这是用于 Windows XP 的代码,但用于 Win 7 的代码我无法找到如何打开端口而不是应用程序。

Code:

procedure TForm1.Button4Click(Sender: TObject);
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;
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        := 'Test Firwwall';
  NewRule.Description := 'Test Firewall';
  NewRule.Applicationname := 'Exe File';
  NewRule.Protocol := NET_FW_IP_PROTOCOL_TCP;
  NewRule.Enabled := TRUE;
  NewRule.Profiles := Profile;
  NewRule.Action := NET_FW_ACTION_ALLOW;
  RulesObject.Add(NewRule);
end;

最后为了让这一切变得清楚,我如何使用delphi在Windows 7防火墙中打开A端口?适用于多个配置文件(私人、公共)。

谢谢您的问候。


要在 Windows 7 下打开端口,您必须指定LocalPorts and Direction的属性HNetCfg.FWRule目的。 MSDN 文档对此进行了解释Using Windows Firewall with Advanced Security http://msdn.microsoft.com/en-us/library/windows/desktop/aa366418%28v=vs.85%29.aspx

{$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.

注意:此代码需要提升。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用Delphi在Win7防火墙中打开端口 的相关文章

  • Windows 服务和 Windows 进程有什么区别?

    是什么不同之处窗户之间service和一个窗户process 服务是真正的 Windows 进程 没有区别 服务的唯一特殊之处在于它由操作系统启动并在单独的会话中运行 一种独立的方式 可防止其干扰桌面会话 传统上命名为daemon http
  • Windows Unicode C++ 流输出失败

    我目前正在编写一个应用程序 它要求我在任意窗口上调用 GetWindowText 并将该数据存储到文件中以供以后处理 长话短说 我注意到我的工具在 战地 3 上失败了 我将问题范围缩小到窗口标题中的以下字符 http www filefor
  • 如何将 CLI 应用程序作为 Windows 服务运行?

    假设我有一个第三方应用程序 它执行后台工作 但将所有错误和消息打印到控制台 这意味着 目前我们必须保持用户登录到服务器 并在每次重新启动时重新启动应用程序 双击 不太酷 我有点确定 有一种简单的方法可以做到这一点 通用服务包装器 可以使用日
  • Emacs 23.1.50.1 在 Windows XP 上随机挂起 6-8 秒

    我的 Windows XP 机器上有 EmacsW32 23 1 50 1 emacs 运行 它随机挂起 5 到 8 秒 非常令人沮丧 有人有解决办法吗 我什至尝试使用来自 gnu ftp 站点的 emacs win32 二进制文件 23
  • 使用 php 运行 ipconfig 命令

    我使用这段代码来了解访问者 客户 的一些信息 它一直在我的 Xampp 虚拟服务器上运行 但我无法在我的主服务器 主机 上运行 我只看到一个空白页 info system ipconfig all echo info 这可能对你有帮助 服务
  • Move() 从动态字符串数组中插入/删除项目

    使用 System Move 从字符串数组中插入 删除项目并不像从其他简单数据类型数组中插入 删除项目那么容易 问题是 字符串在 Delphi 中是引用计数的 在引用计数数据类型上使用 Move 需要对内部编译器行为有更深入的了解 这里有人
  • 在 Windows 上使用 Python 打开设备句柄

    我正在尝试使用 Giveio sys 驱动程序 该驱动程序需要先打开一个 文件 然后才能访问受保护的内存 我正在查看 WinAVR AVRdude 中的 C 示例 它使用以下语法 define DRIVERNAME giveio HANDL
  • CTRL+C 和 CTRL+Break 不同吗?

    我一直认为它们绝对是一样的 但我刚刚在以下位置找到了一些值 CTRL C EVENT 和 CTRL BREAK EVENT设置控制台Ctrl处理程序 http msdn microsoft com en us library ms68601
  • 如何使用 WEBrick 执行 Ruby 代码而不是将代码转储到浏览器?

    当我在浏览器中运行程序时遇到问题WEBrick服务器 http ruby doc org stdlib 2 1 1 libdoc webrick rdoc WEBrick html 它显示了 2loop rb 文件中编写的代码 当我跑步时r
  • 桌面 Delphi 应用程序是否可以通过 Windows 8 认证(使用 Windows 应用程序认证套件)?

    显然 Delphi 任何版本 不支持安全异常处理程序 https forums embarcadero com thread jspa messageID 473469 Visual Studio 中的 SAFESEH 开关 在 Windo
  • TWebbrowser 大量内存泄漏:到目前为止还没有解决方案

    我有一个使用的应用程序TWebbrowser定期导航到特定 URL 并提取一些数据 该应用程序 24x7 持续运行 并在页面中进行大量导航 问题是TWebbrowser有一个众所周知的内存泄漏问题 每次导航到新页面时 应用程序使用的内存都会
  • 如何检测媒体是否已插入可移动驱动器/读卡器

    我有一个读卡器 未插入记忆棒 当我插入计算机时 它在 我的电脑 中显示一个空驱动器 是否有可能知道驱动器是否有媒体 抱歉我不知道如何称呼它 或没有 我找到的建议MSalters to use IOCTL STORAGE CHECK VERI
  • TEdit onclick 全选?

    每当用户单击 TEdit1 或单击选择其中的某些文本时 如何选择 TEdit1 的所有文本 执行超出默认行为的任何操作都可能非常危险TEdit控制 您的用户知道标准 Windows 控件的行为方式 任何偏离此的行为都可能导致混乱 默认情况下
  • Windows Server / Datacenter:设置 CPU 关联性 > 64 个核心

    SetThreadAffinityMask 允许为 64 个逻辑核心 处理器 设置关联掩码 但是 Windows Datacenter 最多可以有 64 个 CPU 每个 CPU 都有多个内核 请参阅here http social tec
  • C# 同步进程启动

    我正在尝试从一段代码启动一个进程 但我希望代码暂停执行 直到进程完成并退出 目前 我正在使用 System Diagnostics Process Start 类来启动 特别是 卸载程序 并且之后执行的代码确实依赖于安装程序卸载程序在恢复执
  • 如何在Linux中打开端口[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我已经安装了 Web 应用程序 该应用程序在 RHEL centOS 上的端口 8080 上运行 我只能通过命令行访问该机器 我尝试从我的
  • 读取进程的进程内存不会返回所有内容

    我正在尝试扫描第三方应用程序的内存 我已经查到地址了 现在是在0x0643FB78 问题是 从那以后我就再也爬不上去LPMODULEENTRY32 gt modBaseAddr is 0x00400000 and LPMODULEENTRY
  • cmake 找不到 boost 库,因为它查找错误的文件名

    我根据文档在 Windows 8 1 机器上构建了 boost 1 56 库 作为共享库和静态库 他们全部出现在BOOST ROOT stage lib目录 文件名格式如下 boost thread vc120 mt 1 56 dll bo
  • 使用 GdiPlus 卸载 DLL 时程序挂起

    我有一个加载 DLL 的应用程序 它使用德尔福 GDI 库 http sourceforge net projects delphigdiplus 该应用程序在卸载 DLL 时挂起 调用免费图书馆 https msdn microsoft
  • 检测 Windows 重新启动是否是由于 Windows 更新造成的

    我的电脑上的一些应用程序一直在检测 Windows 更新是否重新启动 这是可以观察到的 因为它们会在 Windows 更新自动重启后重新启动 这非常有帮助 因为这些应用程序会重新加载更改 甚至unsaved更改或恢复选项卡 如果是浏览器 执

随机推荐