gpt4 book ai didi

delphi - 在 Delphi 中,如何从防火墙 API 中的 LocalPolicy.CurrentProfile.GloballyOpenPorts 获取枚举器

转载 作者:行者123 更新时间:2023-12-02 08:24:21 25 4
gpt4 key购买 nike

我正在编写一些代码,以查看 WinXPVista 的防火墙异常(exception)列表中是否存在针对我们的客户端软件使用的特定端口的漏洞。

我可以看到我可以使用NetFwMgr.LocalPolicy.CurrentProfile.GloballyOpenPorts来获取当前开放端口异常(exception)的列表。但我不知道如何将该枚举列表放入我可以在 Delphi 程序中使用的内容中。

下面列出了我的最新尝试。当我使用 port_list.Item 时,它给我带来了访问冲突。我知道这是错误的,这主要是我的一厢情愿。任何帮助将不胜感激。

function TFirewallUtility.IsPortInExceptionList(iPortNumber: integer): boolean;
var
i, h: integer;
port_list, port: OleVariant;
begin
Result := False;
port_list := mxFirewallManager.LocalPolicy.CurrentProfile.GloballyOpenPorts;
for i := 0 to port_list.Count - 1 do
begin
port := port_list.Item[i];
if (port.PortNumber = iPortNumber) then
begin
Result := True;
break;
end;
end;
end;

最佳答案

好吧,我想我已经弄清楚了。

我必须创建 hnetcfg.dll 的类型库文件。我刚开始时就这样做了,但从那时起我学到了很多有关防火墙对象的知识。当时不起作用,但现在起作用了。您可以从“组件”|“导入组件”创建自己的文件。然后按照向导进行操作。

包装代码使用了我通常不喜欢做的异常,但我不知道如何判断返回接口(interface)的接口(interface)是否实际上返回了我可以处理的数据...所以如果有人能指出我正确的方向,那就会是一个进步。

现在讨论代码,感谢 Jim 的回复。

constructor TFirewallUtility.Create;
begin
inherited Create;
CoInitialize(nil);
mxCurrentFirewallProfile := INetFwMgr(CreateOLEObject('HNetCfg.FwMgr')).LocalPolicy.CurrentProfile;
end;

function TFirewallUtility.IsPortInExceptionList(iPortNumber: integer): boolean;
begin
try
Result := mxCurrentFirewallProfile.GloballyOpenPorts.Item(iPortNumber, NET_FW_IP_PROTOCOL_TCP).Port = iPortNumber;
except
Result := False;
end;
end;

function TFirewallUtility.IsPortEnabled(iPortNumber: integer): boolean;
begin
try
Result := mxCurrentFirewallProfile.GloballyOpenPorts.Item(iPortNumber, NET_FW_IP_PROTOCOL_TCP).Enabled;
except
Result := False;
end;
end;

procedure TFirewallUtility.SetPortEnabled(iPortNumber: integer; sPortName: string; xProtocol: TFirewallPortProtocol);
begin
try
mxCurrentFirewallProfile.GloballyOpenPorts.Item(iPortNumber, CFirewallPortProtocalConsts[xProtocol]).Enabled := True;
except
HaltIf(True, 'xFirewallManager.TFirewallUtility.IsPortEnabled: Port not in exception list.');
end;
end;

procedure TFirewallUtility.AddPortToFirewall(sPortName: string; iPortNumber: Cardinal; xProtocol: TFirewallPortProtocol);
var
port: INetFwOpenPort;
begin
port := INetFwOpenPort(CreateOLEObject('HNetCfg.FWOpenPort'));
port.Name := sPortName;
port.Protocol := CFirewallPortProtocalConsts[xProtocol];
port.Port := iPortNumber;
port.Scope := NET_FW_SCOPE_ALL;
port.Enabled := true;
mxCurrentFirewallProfile.GloballyOpenPorts.Add(port);
end;

关于delphi - 在 Delphi 中,如何从防火墙 API 中的 LocalPolicy.CurrentProfile.GloballyOpenPorts 获取枚举器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/77890/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com