gpt4 book ai didi

c++ - 服务器套接字 - 仅接受来自白名单中 IP 地址的连接

转载 作者:行者123 更新时间:2023-11-30 00:56:38 27 4
gpt4 key购买 nike

我有一个套接字服务器,它监听并接受来自客户端的连接,其工作方式如下:

... 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 地址是否在我的白名单中指定的范围内?任何示例将不胜感激。

最佳答案

您想调用 getpeername 从客户端获取地址信息。然后检查他们的IP地址是否在白名单中。如果没有,请断开它们。

为了检查他们的 ip 地址是否在给定范围内,您需要将地址字节转换为一个数字。您可以通过以下方式做到这一点:

unsigned int n = bytes[0] << 24 | bytes[1] << 16 | bytes[2] << 8 | bytes[3];

如果地址范围的下限是A,上限是B,客户端的ip地址是X,那么他们是白名单if (A <= X && X <= B) .

如果每个范围的 ip 地址都测试为 false,则它们不在白名单中,您应该断开它们。

关于c++ - 服务器套接字 - 仅接受来自白名单中 IP 地址的连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9696618/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com