2016-02-29 56 views
0

是否可以在接受連接之前檢查服務器/接受方的遠程主機的IP?在接受asio之前檢查IP :: IP :: TCP套接字

其背後的原因是:我有ň客戶經常試圖連接到一臺服務器,我不希望不斷有ň打開的連接。相反,我希望能夠選擇我想要連接的客戶端,並只在需要時接受這些連接。

不幸的是,由於防火牆和策略的原因,連接需要從客戶端發起,所以採用相反的方式。

從TCP的角度來看,這甚至是可能的嗎?如何在asio中完成?

+1

啓動連接的客戶端聽起來就像建立連接的正常方式。至於你的問題,沒有任何標準的方法來窺探傳入的連接是隊列,只有當你接受連接,你才能得到它的地址。它也是解除連接的唯一標準方式,您不能「關閉」傳入隊列中的連接。 –

+0

好的,謝謝,那麼我需要想辦法做到這一點。 – user66875

+0

@ user66875可能不是。您可以只接受連接,獲取遠程IP地址(請參閱[這裏](http://stackoverflow.com/questions/601763/how-to-get-ip-addresss-of-boostasioiptcpsocket))並關閉該連接你不喜歡那個客戶。 – nos

回答

0

有兩種方法:

  1. 您接受連接,並得到同行的地址,檢查並關閉它。您也可以藉此機會告訴客戶端服務器正忙。然而,這一點可能會打開大量連接請求的攻擊媒介。

  2. 您可以在運行時使用類似fail2ban的方式修改防火牆。

順便說一下,是什麼讓你不願意持有N打開連接?現代系統可以處理數十萬甚至數百萬個連接而沒有問題。

+0

謝謝,我會盡力實施1)。我不知道打開這麼多的連接不會成爲性能方面的問題 – user66875