我有一個偵聽並接受來自客戶端的連接套接字服務器,它的工作原理如下只從IP地址的連接:服務器插座 - 接受白名單
... 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不在白名單中。但是,如何執行此操作,如何檢查特定IP地址是否在我的白名單中指定的範圍內?任何例子,將不勝感激。
你沒有提到操作系統,但是如果你在* nix系統上運行,你可以簡單地使用TCP Wrappers並讓它爲你完成工作。 – 2012-03-14 05:59:51