2015-09-15 54 views
2

我有一個TcpClientTcpListener基於Windows服務在我的網絡上的兩臺機器上運行。客戶端和服務器節點都使用相同的Windows服務。服務運行爲Local SystemPC01是Win7 x64,PC02是Win7 x86。Windows服務(TCP客戶端/偵聽器)防火牆例外塊流量

從客戶端到服務器的連接嘗試期間,應用程序拋出了SocketException 10060(連接超時),並且我發現由應用程序的自動防火牆配置代碼生成的Windows防火牆例外不允許TCP流量通過。

退一步,我想下面的測試順序上PC01PC02防火牆永久禁用刪除它作爲一個變量:

  1. 禁用防火牆PC01 - 這個工作。
  2. 手動啓用防火牆PC01手動添加了一個例外,以允許端口12345上的所有入站TCP流量 - 此工作。
  3. 進一步限制例外,只允許來自本地子網的遠程流量 - 這有效。
  4. 進一步限制例外,只允許(所有)服務 - 這有效。
  5. 進一步限制例外情況,通過從服務列表中選擇或輸入服務短名稱來允許特定服務 - 此失敗。
  6. 試圖改爲通過選擇myservice.exe可執行文件將例外限制爲特定服務 - 此失敗。

當我的Windows服務在異常僅限於特定服務時阻止其工作時,它是如何工作的?是否有我需要注意的Windows服務警告?開放端口是所有服務的唯一解決方案嗎?


編輯:我用netstat -a -n -b收集關於活動連接和偵聽端口信息。以下摘錄詳細信息有關我的服務的信息:

Active Connections 

Proto Local Address   Foreign Address  State 
TCP 0.0.0.0:12345   0.0.0.0:0    LISTENING 
[myservice.exe] 
... 
UDP 0.0.0.0:12344   *:*      
[myservice.exe] (listening for UDP broadcast packets) 
... 
UDP 0.0.0.0:62794   *:*      
[myservice.exe] (this is an outbound broadcast packet) 

感謝大家的任何見解,你可以提供。

+0

我已經發布了這個SO而不是SF,因爲我認爲它必須與我的特定服務有關。 – khargoosh

+0

您可以使用'netstat -a -n -b'來查看偵聽端口和相關的可執行文件;它是在12345端口上偵聽的可執行文件嗎? –

+0

@HarryJohnston謝謝你 - 是的,我的可執行文件出現在活動連接列表中,既在預期的TCP端口上,也在UDP端口上,我也打開了。我會將這些信息添加到問題中。 – khargoosh

回答

1

爲了選擇一個特定的可執行文件來工作,可執行文件的路徑必須匹配防火牆所期待的路徑。顯然,防火牆GUI出於某種原因正在轉換路徑,以便相對於%USERPROFILE%;我懷疑這構成了Windows中的一個錯誤。 (如果我沒有記錯的話,防火牆通常可以處理使用環境變量的路徑,例如%SystemRoot%,但顯然每個用戶的環境變量將不起作用,因爲防火牆規則不在正確的用戶的上下文)。

+0

我以編程方式添加防火牆例外,所以我將在運行時簡單地確定服務的路徑,並使用它來代替服務短名稱。謝謝哈利! – khargoosh

+0

經過進一步測試,結果證明對於以'Local System'運行的服務,'%USERPROFILE%'評估爲'C:\ Windows \ ServiceProfiles \ LocalService'。 – khargoosh