我有一个侦听和接受来自客户端的连接的套接字服务器,其工作原理如下:
... 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 不支持这一点,我可以先接受连接,然后如果 peeraddress 不在白名单中,则立即关闭 socketfd。但是如何执行此操作,如何检查特定 IP 地址是否在我的白名单中指定的范围内?任何示例将不胜感激。