2016-11-08 127 views
2

当我从导向C语言创建的Hello World示例++上ZeroMQ在这里找到: http://zguide.zeromq.org/page:all#Ask-and-Ye-Shall-Receive如何禁止Windows防火墙的Windows安全警报?

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

它看起来像这样: Screenshot

这里是事情变得有趣。

我只需要我的程序在端口5555侦听来自本地主机的连接,我做需要允许在端口5555的入站连接。这是因为我只需要在本地主机应用程序之间的通信。

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

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

单击取消警报将在HelloWorldServer.exe的所有端口上显式拒绝入站规则。这是完全罚款

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

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

现在问题变成有无自动响应Windows安全警报点击取消?有没有办法阻止它弹出,因为不需要允许?

该提示是不合需要的,因为它暗示应用程序需要创建一个漏洞。

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

+0

你如何绑定监听套接字?即使你打算只在本地主机上使用套接字,如果你没有正确绑定,它也会允许远程连接,并触发防火墙。这里有用的写法:[理解socket编程的INADDR_ANY - c](http://stackoverflow.com/a/16510000/4581301) – user4581301

+0

'socket.bind(“tcp:// *:5555”);'the完整的例子是在http://zguide.zeromq.org/cpp:hwserver – ComradeJoecool

+0

赔率是好的,'*'意味着允许任何地址,本地或远程。给''socket.bind(“tcp:// localhost:5555”);'或'socket.bind(“tcp://127.0.0.1:5555”);'尝试将端口绑定到本地流量。 – user4581301

回答

2

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

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

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

调用socket.bind与本地主机地址127.0.0.1

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

限制插座允许连接到本地计算机,并应沉默的大多数的Windows防火墙配置防火墙警告。