クライアントからの接続をリッスンして受け入れるソケットサーバーがあります。これは次のように機能します。
... do some pre-processing (socket, binds, etc)
//listen to client
if (listen(sockfd, BACKLOG) == -1) {
perror("listen");
exit(1);
}
printf("server: waiting for connections...\n");
while(1) { // main accept() loop
sin_size = sizeof client_addr;
new_fd = accept(sockfd, (struct sockaddr *)&their_addr, &sin_size);
if (new_fd == -1) {
perror("accept");
continue;
}
//do something .....
.....
}
特定の IP アドレスからの接続のみを受け入れるようにサーバーを制限するにはどうすればよいですか? たとえば、受け入れる IP アドレスのホワイト リストを含むテキスト ファイルを次の形式で作成
でき
ます
。
したがって、基本的には、ホワイトリストに含まれていないすべての IP アドレスからの接続を拒否したいと考えています。ソケット ライブラリ API がこれをサポートしていない場合は、最初に接続を受け入れてから、peeraddress がホワイトリストにない場合はすぐに socketfd を閉じてもかまいません。しかし、これを実行する方法、特定の IP アドレスがホワイトリストで指定された範囲内にあることを確認するにはどうすればよいですか? 任意の例をいただければ幸いです。