c - Linux TCP 服务器 : reading client's IP address before accepting connection

标签 c linux sockets ddos

Related: C++ Winsock API how to get connecting client IP before accepting the connection?

您好,当您运行一个 TCP 服务器(用 C 语言编写,使用伯克利套接字 API)时,是否可以在实际接受连接之前读取客户端的 IP 地址/端口?

据我所知你必须accept首先连接 shutdown如果您因为其 IP 地址而不想与给定客户端通信,则直接在其后。

伪代码(我正在寻找 peekrefuse 方法):

 int serverfd = listen(...);
 for(;;) {
     struct sockaddr_in clientAddr;
     peek(serverfd, &clientAddr, sizeof(clientAddr));
     if(isLegit(&clientAddr)) {
         int clientfd = accept(serverfd, &clientAddr, sizeof(clientAddr));
         handleClient(clientfd);
     } else {
         refuse(serverfd, &clientAddr, sizeof(clientAddr));
     }
 }

最佳答案

我认为您尝试做的是在匹配特定 IP 时阻止 TCP 协商发生。据我所知,这在套接字层是不可能的。 TCP 协商将发生,当您接受套接字时,协商已经发生。

从技术上讲,您可以通过某种方式查看该状态信息,但是,它不会按照您的预期进行。接受套接字是已经完成工作的内核与想要读取数据的程序之间的接口(interface)。最简单的做法是接受套接字,如果不需要,则启动它。

如果你想首先阻止 TCP 协商的发生,你需要使用 iptables。

关于c - Linux TCP 服务器 : reading client's IP address before accepting connection,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6418603/

相关文章:

html - 使用 C 的 HTTP 响应中的图像?

php - 无法打开库 '/opt/ibm/iSeriesAccess/lib64/… : file not found?

linux shell 脚本 sed

python - 通过 TCP/UDP 发送一个大数据包和许多小数据包?

node.js - socket.io 强制断开客户端

python - 从套接字接收上限字节数的最佳方法是什么?

使用日期创建文件及其名称

c - 一个 scanf 中的多个输入显示出各种行为

linux - 使用 awk 命令中获取的字段进行 grep

c - 在 Linux 上使用 `splice`……其他系统还有什么?