gpt4 book ai didi

windows - 如何检查 Windows 防火墙中的规则?

转载 作者:可可西里 更新时间:2023-11-01 11:25:42 25 4
gpt4 key购买 nike

我想检查一个端口是否在 Windows 防火墙中打开。

我使用 netsh 找到了这种方式:

netsh advfirewall firewall show rule name="My rule"

如果规则存在或不存在,它将返回...

但是,根据 Windows 语言,这将返回不同的消息。我正在尝试以更好的方式解决这个问题。我想要一个结果YesNo , TrueFalse ,不是本地化的字符串。

你有什么建议吗??

最佳答案

AS:Windows Vista 中引入了“advfirewall”命令和底层服务。 Windows 2000/XP 没有它,要支持它你应该使用不同的接口(interface)。

安装了第三方非 Microsoft 防火墙(例如作为防病毒套件的一部分)的计算机也是如此。

一般在 Vista+ 上你应该获取 INetFwRules COM 对象,然后枚举其中的所有规则,并检查每条规则是否覆盖了你要访问的端口。

按照例子获取并枚举规则 https://theroadtodelphi.com/2013/11/21/using-the-windows-firewall-with-advanced-security-scripting-api-and-delphi/#Enumerating防火墙规则

var
CurrentProfiles : Integer;
fwPolicy2 : OleVariant;
RulesObject : OleVariant;
rule : OleVariant;
oEnum : IEnumvariant;
iValue : LongWord;

fwPolicy2 := CreateOleObject('HNetCfg.FwPolicy2');
RulesObject := fwPolicy2.Rules;
CurrentProfiles := fwPolicy2.CurrentProfileTypes;

.....

Writeln('Rules:');

oEnum := IUnknown(Rulesobject._NewEnum) as IEnumVariant;
while oEnum.Next(1, rule, iValue) = 0 do
begin
if (rule.Profiles And CurrentProfiles)<>0 then
begin
Writeln(' Rule Name: ' + rule.Name);
Writeln(' ----------------------------------------------');
Writeln(' Description: ' + rule.Description);
Writeln(' Application Name: ' + rule.ApplicationName);
Writeln(' Service Name: ' + rule.ServiceName);

if (rule.Protocol = NET_FW_IP_PROTOCOL_TCP) or (rule.Protocol = NET_FW_IP_PROTOCOL_UDP) then
begin
Writeln(' Local Ports: ' + rule.LocalPorts);
Writeln(' Remote Ports: ' + rule.RemotePorts);
Writeln(' LocalAddresses: ' + rule.LocalAddresses);
Writeln(' RemoteAddresses: ' + rule.RemoteAddresses);
end;

.....

end;

OTOH 使用静态绑定(bind)而不是 OleVariant 应该更快更可靠,检查 https://github.com/yypbd/yypbd-Delphi-HeaderPorting/tree/master/example/FirewallExample

关于windows - 如何检查 Windows 防火墙中的规则?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38315883/

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