2016-11-08 49 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防火牆配置防火牆警告。