问题标签 [windows-firewall-api]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
.net - 防火墙阻止 Windows 服务 WiX元素
我有一个在以下端点侦听的自托管 WCF 服务(即 Windows 服务主机,而不是控制台主机):
无论我在防火墙中打开多少,它都不会接受任何连接。我必须完全关闭防火墙才能接受请求。即使我将程序更改为“任何”,即不是 servicehost.exe,它仍然不会接受请求。
我已经使用 WiX 编写了一些入站规则。像这样:
在此线程上,评论提示添加 https.sys: WCF 服务被 Windows 防火墙阻止
然后他们继续说这个页面讨论了向异常添加 URL 或其他内容: https ://docs.microsoft.com/en-us/dotnet/framework/wcf/feature-details/configuring-http-and- https
所以我在电脑上手动添加了 https.sys(位于 C:\Windows\System32\https.sys)并进行了测试。依然没有。
我怀疑我需要添加 URL 的东西,但我不知道该怎么做,而且像往常一样,WiX 文档非常稀疏。
有人有想法么?
编辑,解决方案:如该线程中所述:
FirewallException 元素需要位于 Component 标记中,而不是 file 标记中。文档确实避开了这一点,但像往常一样没有正确解释或给出任何示例。
另外,为了实现Program=any、Port=8733的防火墙规则,需要省略program属性。同样,文档确实避免使用 Port OR Program,详细说明如果同时定义了这两个规则,则该规则将不适用于防火墙。但是,它没有详细说明与这些属性相关的最终防火墙规则。
以下 WiX 代码已实现并允许请求通过。
google-cloud-platform - 连接 2 个外部 IP 谷歌云平台的问题
我创建了我的虚拟机(谷歌云平台),使用 Windows Server 2008 R2。所以我安装了一个需要打开 6900 端口才能运行的程序。工作程序必须连接到它自己的服务器,即:200.229.50.3:6900
. 所以我进入了谷歌云平台的防火墙规则,将ip设置为0.0.0.0/0并打开了6900端口。在我的VM上也进入了防火墙的高级配置,也允许了6900端口。尝试运行程序并失败,尝试运行 telnet 进行测试并失败。已经检查了安全设置,禁用了防火墙等。我不知道发生了什么。
遵循我的谷歌云平台防火墙规则如下:
遵循我的实例防火墙规则:
按照程序在尝试连接自己的服务器时出错:
如果有人想进入我的实例以更好地检查它,可以从这里下载 RDP 文件:RDP 文件
发生错误的程序位于桌面上,名称为xstart
。
随意运行它,并尝试了解问题所在,因为我找不到它运行不正确的原因。
有人可以帮助我吗?
编辑1:
按照我的 VPC 路由:
VPC 1 VPC 2
编辑2:
c# - 在 .Net Core 3.1 中使用 NetFwTypeLib 时出现内存泄漏
我在我一直在开发的这个 IDS/IPS 流量监控控制台应用程序中发现了内存泄漏。我以为是实体框架,原来是防火墙代码。以下代码在 .net 4.6.2 中运行良好,并且在 .net 核心中运行良好。但是,它有内存泄漏(特别是第二firewallRule
行):
我必须每天重新启动应用程序,因为它会消耗尽可能多的内存。当它应该运行在 35MB 左右时,我已经看到它高达 12GB。也只需要一天左右的时间就可以达到如此高的水平。所以基本上每个电话都firewallRule
在吃〜5MB-10MB。似乎很疯狂,一条或一条空记录会占用那么多内存。
我相信是那一firewallRule
行,因为我已经在被调用的方法(以及与此相关的应用程序)中注释掉了所有其他行,当我最终注释掉该行时,泄漏就停止了。如果我的逻辑有缺陷,请告诉我。
如果要对其进行测试,则必须引用 以NetFwTypeLib
使该代码正常工作。
有谁知道为什么会发生这种情况以及如何解决?
更新:
以下是那些相信我没有全部评论的人的原始代码:
在生产中,它只是“按原样”执行此方法,只是吃掉内存。同样,它特定于 .Net Core,因为我在 .Net 4.6.1(未注释)中运行相同的代码一年多没有问题。
现在我想了想并把它注释掉了,我也可以把它通过一些循环并在内部进行故障排除。这是一场比赛...
它当前运行的服务器是 Windows Server 2016。
更新 2:它也可以在 Windows 10 中重现。这是重现错误的完整代码:
结果如下:
Visual Studio 诊断工具:
看起来像微软的错误?我想我会尝试解决这些内存分析器之一,但即使我发现了问题,我能做什么?这是对基本 Windows 库的基本调用,我认为这就是为什么评论中的某些人没有抓住重点。
我没有要求任何人记忆我的应用程序或追踪问题(从来没有......我已经这样做了)。我正在寻求替代解决方案。是否有可能完全可以使用的结构或 linq 问题或其他语句?
如果您想关闭这个问题,那就这样吧,但我很难相信没有其他人会遇到这个问题。
c++ - Windows 防火墙 C++ API - 如何正确清理 COM 资源?
我正在尝试使用基于 COM 的 Windows 防火墙 API 来遍历现有的防火墙规则并找出其中是否存在一个特定规则。
目前,我很难理解Cleanup
本示例的部分内容(https://docs.microsoft.com/en-us/previous-versions/windows/desktop/ics/c-enumerating-firewall-rules):
特别是,这些行让我感到困惑:
指针在pFwRule
每次迭代时都会被覆盖,所以这里我们只显式地添加了通过上述循环获得Release
的最后一个Rule。QueryInterface
while
Release
从成功调用获得的指针QueryInterface
是合乎逻辑的,因为在返回之前QueryInterface
调用AddRef
(在文档中明确说明)。
但我无法理解的是:
为什么我们不在
Release
循环中查询下一个规则之前所有之前遍历的规则?它们是否在某处被隐式释放?如果将非空指针传递给它,是否会QueryInterface
调用undercover?Release
我们为什么不
Release
打电话pFwRules
?该函数不是INetFwPolicy2::get_Rules
为我们提供了一个指向 COM 对象的新指针,该指针AddRef
在返回给我们之前已被 'ed (因此最终必须Release
由调用者 d )?pEnumerator
关于从获得的指针的相同问题get__NewEnum
:为什么我们不也Release
这样做呢?
firewall - 资源监视器中的防火墙状态
在网络下的资源监视器中,有一个名为监听端口的选项卡,其中有一列名为防火墙状态。它的值如 1) 允许,不受限制 2) 不允许,不受限制 3) 允许,受限制
我的理解是第一个代表是否允许传入流量。(当我禁用防火墙后进行测试时,一切都更改为允许)
我对第二个的理解是是否有限制这种联系的规则。但是在这种情况下,allowed,restricted 没有任何意义,因为当它被限制时,它怎么能被允许。
还有一个选项可以阻止或允许与任何可用规则不匹配的所有连接。任何人都可以请详细解释这些事情吗?
winapi - Windows 防火墙:寻找用户交互 API
我正在考虑为 Windows 10 制作一个与 Windows 防火墙交互的小型 GUI 应用程序。
但是,我无法为一项所需的操作找到相关的 API。
用例(情况)
当在相当出厂默认的家庭使用情况下使用 Windows 10 时(图片:奶奶正在阅读她的电子邮件并浏览网页),防火墙的配置方式通常类似于:
- 存在许多规则,允许范围广泛的 Windows 服务和应用程序(例如 webbrowser、emailclient)各种形式的网络访问。
- 可能有一些规则完全阻止特定应用程序访问互联网(或受到特定限制)。
- 几个可能的配置文件/策略之一正在生效,它决定了当以前未知的应用程序尝试使用网络或互联网时要做什么。
我的问题完全围绕第 3 点展开。
我的目标
通常,Windows 防火墙的活动配置文件将默认设置为拒绝此类“新”应用程序的连接,但也会显示一个弹出窗口,询问用户是否允许。我希望保持这个功能在很大程度上保持原样,但不是出现内置弹出窗口,我希望窗口通知我的自定义应用程序,并让我决定适当的操作(无论是否有用户交互)。
截图:
WINDOWS 防火墙 API
至于我到目前为止发现的内容:“Windows Defender 防火墙”或只是“Windows 防火墙”(netfw.h)有许多相关的 API/功能。它们(大部分)有据可查:https ://docs.microsoft.com/en-us/windows/win32/api/netfw/
INetFwRule(|2|3) API处理各个防火墙规则。
INetFwProfile和INetFwPolicy(|2) API 处理与我感兴趣的设置相关的设置,例如:
INetFwPolicy2::get_NotificationsDisabled
INetFwProfile::get_NotificationsDisabled
但是在附近我找不到任何与注册函数挂钩的任何东西,只有用于打开或关闭通知的 getter/setter 方法。
迄今为止发现的最有前途的 API 似乎是INetFwProduct(s);其中包含
INetFwProducts::Register -> 允许应用程序或服务访问向 Windows 防火墙注册第三方防火墙产品的方法和属性。
INetFwProduct::get_RuleCategories -> 对于第三方防火墙产品注册,指示第三方防火墙希望从 Windows 防火墙获得所有权的规则类别。
这显然与注册第三方程序(例如 Zone Alarm、Norton Security 等)有关,以便它可以接管 NETFW 工作负载的某些方面。这确实是我的应用程序属于安全工具的名称,这并非不可能。
INetFwProduct的东西带来了一些烦人的约束(Authenticode-signing 等),这并不是特别相关/重要(但稍后会详细介绍)。
我的问题
然而,主要问题是,这仍然没有让我真正了解我的(想象中的INetFwProduct注册的)软件将如何完成我想要的。
我希望在某个地方会有另一个 API,它提供将我的INetFwProduct包连接到 NETFW 或至少一些网络层 API 等的方法。
有谁知道我在哪里,通向哪里?或者也许熟悉一种更简单的方法来完成同样的事情。
IETFW 产品似乎有点过头了
我也开始怀疑整个INetFwProduct路线涉及我的程序承担巨大的责任,而我真正想做的只是替换/挂钩到 NETFW 工作量的一小部分。毕竟,我不想替换整个规则集/策略后端,也不想改变解释规则的方式,也不想改变任何其他花哨的东西。我只希望调用我的用户空间程序,而不是(或之前)用户被弹出 GUI 窃听。理想情况下,我的程序所做的只是返回一个关于是否允许连接通过的布尔值(如果需要,它可以使用INetFwRule API 来为来自同一程序的未来连接添加一个永久规则)
验证码要求
与我的问题没有直接关系,但INetFwProduct功能也确实给图片带来了一堆新的约束,然后我的应用程序(似乎)必须经过 Authenticode 签名并需要一个 IMAGE_DLLCHARACTERISTICS_FORCE_INTEGRITY 标头。我对这两件事都不是很熟悉,尽管我确实认为(并且似乎已经确认)免费的 Lets Encrypt 证书不能用于此目的,自签名证书可能也是如此。而且由于我不打算把它做成一个非常大的(也不是抛光或付费的)产品,也没有特别计划将它作为 FOSS 项目发布,结果似乎是,你不能没有这样的程序每年至少花费 150 欧元或 350 欧元进行认证。
powershell - 想了解为什么 Powershell 参数在某些情况下不起作用
我的目标是通过给定的过滤器列出所有可用的防火墙规则,并且对 Powershell 来说是全新的。
观察到一个奇怪的行为,这让我问是否有一些我不知道的隐藏的东西。我可能会使用 Pipes 来完成同样的工作,但我有兴趣了解是否存在这样的原因。
按预期运行
按预期运行
但是,当我添加/组合 -Enabled True 时,DisplayName 正在生成这样的错误消息,其中 DisplayGroup 正在生成结果。
无法使用指定的命名参数解析参数集。
- Get-NetFirewallRule -DisplayName n* -Enabled True
正在工作中
Windows 10 机器上的 PS 版本“5.1.177”。