У меня есть сервер сокетов, который прослушивает и принимает подключения от клиента, который работает следующим образом:
... 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-адресов, в следующем формате:
202.168.2.5 - 202.168.2.127
92.104.3.1 - 92.104.4.254
// и так далее
Таким образом, я хочу отклонить соединение со всех IP-адресов, не включенных в белый список. Если API библиотеки сокетов не поддерживает это, я согласен с идеей сначала принимать подключения, а затем сразу же закрыть socketfd, если peeraddress не находится в белом списке. Но как это сделать, как я могу проверить, что определенный IP-адрес находится в диапазоне, указанном в моем белом списке? Любые примеры будут оценены.