【问题标题】:How to suppress the Windows Security Alert for Windows Firewall?如何抑制 Windows 防火墙的 Windows 安全警报?
【发布时间】:2017-03-22 10:18:22
【问题描述】:

当我从此处找到的 ZeroMQ 指南中用 C++ 创建 Hello World 示例时: http://zguide.zeromq.org/page:all#Ask-and-Ye-Shall-Receive

并运行应用程序,我收到一个 Windows 安全警报,询问我是否允许应用程序在公共网络或专用网络上通信。

看起来像这样:

这里是有趣的地方。

我只需要我的程序在端口 5555 上侦听来自本地主机的连接,我确实需要允许端口 5555 上的传入连接。这是因为我只想在本地主机上的应用程序之间进行通信.

客户端和服务器都在同一台机器上运行。

这是我目前的流程。我启动服务器,出现 Windows 安全警报,因为我以非管理员帐户运行应用程序,所以我只有标准权限。然后我点击警报上的取消。

单击警报上的取消会在 HelloWorldServer.exe 的所有端口上明确拒绝入站规则。这完全没问题

然后我启动客户端。由于客户端正在连接到本地主机。我实际上不需要在本地机器之外发送消息,它的所有消息都可以到达服务器。

鉴于对 HelloWorldServer.exe 传入连接的明确拒绝规则,消息仍然可以从本地主机上的客户端到达。这是一个理想的结果。

现在问题变成了是否自动响应 Windows 安全警报以单击取消?由于不需要允许,有什么方法可以阻止它弹出?

提示是不可取的,因为它暗示应用程序需要创建漏洞,而实际上它没有。

请假设命名管道不是 tcp 作为进程间通信手段的有效替代方案。

【问题讨论】:

  • 监听socket是怎么绑定的?即使您打算仅在未正确绑定的情况下将套接字与本地主机一起使用,它也将允许远程连接并触发防火墙。这里有一篇有用的文章:understanding INADDR_ANY for socket programming - c
  • socket.bind ("tcp://*:5555"); 完整示例位于zguide.zeromq.org/cpp:hwserver
  • * 表示允许任何本地或远程地址的可能性很大。尝试将 socket.bind ("tcp://localhost:5555");socket.bind ("tcp://127.0.0.1:5555"); 绑定到本地流量。
  • localhost 会导致运行时错误,因为 ZeroMQ 需要一个地址。但是,使用 127.0.0.1 允许程序以标准权限运行,而无需尝试创建防火墙规则。成功!非常感谢您的建议。做出回答,我会接受的。

标签: tcp port ipc zeromq windows-firewall


【解决方案1】:

当绑定套接字时,调用者可以指定套接字绑定的IP地址。 ZeroMQ提供的编码样例指定

socket.bind ("tcp://*:5555"); 

* 似乎指定了所有可能的地址(在 BSD 套接字派生的说法中为 INADDR_ANY),这将触发 Windows 防火墙,因为它允许远程和本地地址。

使用 localhost 地址 127.0.0.1 调用 socket.bind

socket.bind ("tcp://127.0.0.1:5555"); 

限制允许连接到本地计算机的套接字,并且应该使大多数 Windows 防火墙配置的防火墙警告静音。

【讨论】:

    猜你喜欢
    • 2014-07-20
    • 2013-07-25
    • 2012-02-11
    • 1970-01-01
    • 1970-01-01
    • 2014-09-21
    • 1970-01-01
    • 2019-04-07
    • 1970-01-01
    相关资源
    最近更新 更多