2011-07-10 10 views
0

私のゲームサーバーは、すべてのソケットからソケットを受け入れています。しかし、特定のIPを攻撃からブロックするにはどうすればよいですか?彼らが私のサーバーなどをクラッシュさせたいのなら、あなたは知っています。 SFMLライブラリ、C++を使用しています。特定のIPからのソケットのみを受け入れる

+0

SFML SocketTCPクラスとSocketUDPクラスを使用していますか? – andrewdski

答えて

2

TCPでは、プログラム(または使用しているライブラリ)がaccept(2)を呼び出すと、2番目の引数はクライアントのアドレスを示す出力です。

UDPの場合、接続はありませんが、recvfrom(2)があります。これはちょうどaccept(2)のように、ピアのアドレスを示します。だからあなたは好きではない同輩を無視することができます。

または、ある種のファイアウォールアプライアンスの背後にあるサーバーを実行し、そこでルールを追加するか、iptablesなどをホストマシン上のソフトウェアファイアウォールとして使用することができます。

SFMLでは空のアドレスを引数として渡すと、SocketTCP::AcceptSocketUDP::Receiveとなり、どちらもピアのアドレスが与えられます。

+0

OK、要求の直後にIPをチェックしますか? – Eli

+0

Yup、 'accept()'の直後に、返されたIPをチェックして、IPがブラックリストに登録されている(またはホワイトリストに登録されていない)場合は接続を閉じます。 –

+0

UDPについてはどうですか?つまり、ユーザーは膨大なデータで私のサーバーを爆破することができ、帯域幅が狂ってしまいます。 – Eli

0

私はいくつかのipsをブロックするための具体的な方法はわかりませんが、発信IPを決定した後で、確かに要求(おそらくあなたの場合は接続要求)を拒否できます。ブロックされたIP(またはブラックリストされたIP)のリストを維持する(追加/削除が容易になるように設定する)。ブラックリストに登録されているipsの1つから来た場合は、リクエストを拒否する。

+0

OK、要求の直後にIPをチェックしますか? – Eli

+0

はい(getperrnameのように思う人もいます)、あなたのケースではうまくいくはずです。 –

+0

UDPについてはどうですか?つまり、ユーザーは膨大なデータで私のサーバーを爆破することができ、帯域幅が狂ってしまいます。 – Eli

0

Windowsでは、WinSock 2.xには、接続要求を条件付きで受け入れ/拒否するために使用できるWSAAccept()のオプションのコールバックパラメータがあります。クライアントIP /ポートは使用可能なパラメータの1つです。

関連する問題