Linux/C++ TCP サーバーでは、悪意のあるクライアントが複数のソケットを開くのを防ぐ必要があります。そうしないと、サーバーがクラッシュするまで何千もの接続を開くことができます。
同じコンピューターがサーバーに既に接続されているかどうかを確認する標準的な方法は何ですか? IP アドレスに基づいて行う場合、同じ家にいる 2 人が別のコンピューターにいても同時にサーバーに接続できないということではないでしょうか?
どんな情報でも助かります!前もって感謝します。
TCP 自体は、クライアントを識別するための IP アドレス以外には何も提供しません。いくつかの (非排他的な) オプション:
1) 任意の IP アドレスからの接続数を 10 や 20 などの妥当な数に制限します (システムの実際の動作に応じて異なります)。これにより、悪意のある DoS 攻撃を防ぐことができますが、妥当な使いやすさも維持できます。
2) 接続の最大数を妥当なものに制限します。
3)これを上位層のソリューションに委任できます。プロトコルの一部として、(インストールなどごとに) 1 回だけ生成される一意の識別子をクライアントに送信させます。ただし、これは簡単に偽装できます。
1 と 2 は、それを処理するサーバーの数だと思います。それらを構成ファイルに入れて、シナリオに応じて調整できるようにします。