簡體   English   中英

C ++ - 檢測到服務器的多個連接

[英]C++ - Detecting multiple connections to server

在Linux / C ++ TCP服務器中,我需要防止惡意客戶端打開多個套接字,否則它們只能打開數千個連接,直到服務器崩潰。

檢查同一台計算機是否已在服務器上建立連接的標准方法是什么? 如果我基於IP地址這樣做並不意味着同一個房子里的兩個人即使在不同的計算機上同時也無法連接到服務器?

任何信息幫助! 提前致謝。

TCP本身並不提供用於識別客戶端的IP地址以外的任何內容。 一些(非獨家)選項:

1)將來自任何IP地址的連接數限制為合理的數量,例如10或20(取決於您的系統實際執行的操作。)這樣,它將防止惡意DoS攻擊,但仍允許合理的可用性。

2)將最大連接數限制為合理的數量。

3)您可以將其委托給更高層的解決方案。 作為協議的一部分,讓客戶端發送僅生成一次的唯一標識符(每次安裝等)。 然而,這可能很容易被欺騙。

我相信1和2是有多少服務器處理它。 將它們放在配置文件中,以便根據場景調整它們。

除非你有某種訂閱/登錄系統(但是有人可以嘗試一次登錄數十億次,因為必須有一些用於記錄的握手),只有基於“這是相同的發送者”的IP地址在)。

如果兩個客戶端使用相同的路由器(使用NAT或某些類似的方案),您的服務器將看到相同的IP地址,因此每個IP地址只允許一個連接對“來自同一家庭的多個用戶”不能很好地工作。 如果它們例如使用大學網絡或公司網絡,這也適用。

因此,根據您提供的內容以及您可以從同一個地方獲得的客戶數量,您可能需要高於10分。當然,如果您在發生這種情況時進行記錄,並且您看到了相當數量的“外觀”就像有效的真實用戶沒有進入“,你可以調整數量。

具有某種“滾動平均值”也是有意義的,因此每個IP地址每Y秒接受X個新連接,而不是具有固定的最大數量。 如果連接持續相當長的時間,這是有意義的...對於短時連接,它是毫無意義的...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM