2012-10-16 191 views
5

如果程序在Linux計算機上運行,​​那麼該程序是否可以掃描允許通過防火牆的端口?例如,如果程序員想製作一個聊天系統,但程序需要知道哪些端口沒有被用戶的防火牆拒絕訪問傳入連接,那麼有沒有辦法在你的代碼中檢查這一點?即使防火牆阻止了同一端口與傳入連接,程序也可能無法將套接字綁定到端口。有沒有辦法檢查開放的防火牆端口?TCP端口訪問和C++

旁註:這純粹是爲了教育目的,沒有壞意圖,要清楚我正在寫一個聊天系統,並且在測試期間,我無法連接桌面 - >筆記本電腦,直到通過允許它手動打開一個端口通過我的防火牆。這對我來說似乎有點偏離,而不像程序員的代碼應該要求用戶那樣做。更不用說,我不想讓少數使用此代碼的人面臨風險(如果將端口永久打開,這樣做)。所以看起來我更適合尋找一種方式來利用已經對傳入TCP連接開放的端口。

sidesidenote:所有客戶端運行的Fedora

+1

查看[UPnP](http://en.wikipedia.org/wiki/Universal_Plug_and_Play)。 –

+1

選擇一個高編號的端口,並以其他方式進行端口集合。防火牆不應該阻止超過32000的東西。基於UDP的方法用於綁定到其他服務使用的通用端口(例如1900),允許您引導一個衆所周知的端口可能是開放的,以便爲用於TCP。 –

+1

我不認爲這可以在服務器本身上可靠地完成。如果沒有使用某種遠程代理服務器,服務器就無法通過定界器防火牆測試連接。 – Barmar

回答

4

你無意中發現了執政的新的互聯網應用程序的創建今天的第二大問題。當然,第一大問題是NAT,這是一個強烈相關的問題(並且最終由於IPv6而最終消失)。

並沒有簡單的答案。一個很好的答案是UPnP,但這不是一個簡單的答案,絕不是通用的。我的網絡不運行它。

另一個答案是以某種方式隧道你通過https(或http,如果你必須)做的一切。但是對於像聊天應用程序這樣的事情,這是一個巨大的痛苦