在C ++中接受连接之前如何获取客户端IP地址

mor*_*Tie 5 c++ sockets ip

我正在研究c ++套接字编程...服务器程序绑定到套接字并开始监听连接请求...好了,现在如何列出监听到的请求的IP地址?我知道接受连接后可以获取IP地址,但是可以说我不想接受来自特定IP地址的连接...

Rem*_*eau 7

仅在 Windows 上,您可以使用 WinSock2WSAAccept()函数的条件回调功能在接受连接之前访问客户端信息,甚至在接受连接之前拒绝连接。


val*_*ldo 5

就标准套接字 API 而言,这是无法做到的。在我知道的所有平台上,系统实际上在应用程序有机会监视挂起的请求之前接受连接(即以 SYN+ACK TCP 数据报响应)。


Jir*_*ika 3

为了获得最佳性能,可以通过在网络堆栈中进行过滤来解决这个问题,但是这样做的细节将取决于操作系统(这不是套接字接口的一部分,您的应用程序通常甚至可能没有配置网络的权限)以此方式堆叠。)

另一个机会是在 后accept,此时连接已在 TCP 级别上被接受(CONNECT ACK)。

我认为你不能在你喜欢的中间阶段做到这一点。然而,这与无论如何之后做的事情并没有太大不同accept

  • @user1378573 - “accept”调用不会授予任何人任何新的权利。它只是让您可以通过套接字 API 访问您这边的单个连接。对方对你的伤害相对较小;拒绝服务攻击,或检测到您的端口已打开。但即使你不“接受”,他们也可以做同样的事情。您无法在应用程序级别模拟防火墙。 (2认同)