【发布时间】:2010-08-09 01:38:26
【问题描述】:
当我从 Windows 套接字使用 recv 时,使用 recv 会导致拒绝服务攻击吗? 如果它永远等待数据?那么解决这个问题的最佳方法是什么(警报?)
感谢和问候,
鼠标。
【问题讨论】:
当我从 Windows 套接字使用 recv 时,使用 recv 会导致拒绝服务攻击吗? 如果它永远等待数据?那么解决这个问题的最佳方法是什么(警报?)
感谢和问候,
鼠标。
【问题讨论】:
【讨论】:
是的,recv() 可以无限期阻止。您需要实现某种超时。
我建议使用boost asio library。它包括与套接字连接无缝工作和接收事件的计时器之类的东西。只需设置一个异步套接字,添加一个计时器,如果时间用完就中断。
这仍然不能让您免受 DoS 攻击,因为在超时窗口期间仍可能会涌入大量请求。但是,如果您将超时设置得非常低,可能会有所帮助。
【讨论】:
如果您使用阻塞套接字,请考虑使用 SO_SNDTIMEO 和 SO_RCVTIMEO setsockopt() 选项调整 send() 和 recv() 超时。
创建一个合适的服务器有很多小复杂性,我会考虑通过乞讨、借用或偷窃来获得。这是sample multithreaded socket server。
此外,如果您可以控制双方(客户端和服务器套接字软件),我将创建一个协议,该协议将消息的长度作为消息的前 2 或 4 个字节传入,这样您只需必须阻止该解码数字并继续读取,直到经过的字节数。对客户端和服务器都这样做,这将使您的代码更简单。
【讨论】: