避免拒绝服务攻击

时间:2010-08-09 01:38:27

标签: c++ c windows sockets

当我从windows套接字使用recv时,使用recv会导致拒绝服务攻击吗? 如果它永远等待数据?那么解决这个问题的最佳方法是什么(警报?)

谢谢&的问候,

mouseY的。

3 个答案:

答案 0 :(得分:3)

您似乎误解了拒绝服务的含义。一个例子是对单个Web服务器的大量HTTP请求的到达速度使得Web服务器软件变得如此繁忙以至于无法接受新的TCP连接。维基百科在DoS上有一篇不错的文章,请阅读。

recv(2)只是一个API。像任何其他错误一样滥用它可能会导致问题,包括DoS。但这并不意味着你应该避免它。如果您的问题是在等待阅读时阻止其他套接字,请查看非阻塞套接字 I / O多路复用,如select(2)poll(2) }和epoll(4)

答案 1 :(得分:1)

是的,recv()可以无限期阻止。你需要实现某种时间。

我建议使用boost asio library。它包括定时器,它可以与套接字连接无缝地工作并接收事件。只需设置一个异步套接字,添加一个计时器,并在时间用完时中断。

这仍然不会让你免受DoS攻击,因为在超时窗口期间仍然会有大量请求。但是,如果将超时设置得很低,可能会有所帮助。

答案 2 :(得分:1)

如果您正在使用阻塞套接字,请使用SO_SNDTIMEO和SO_RCVTIMEO setsockopt()选项调整send()和recv()超时。

创建一个合适的服务器有很多小的复杂性,我会考虑通过乞讨,借用或窃取这个来获取。这是sample multithreaded socket server

此外,如果您可以控制双方(客户端和服务器套接字软件),我会创建一个协议,其中消息的长度将作为消息的前2或4个字节传入,这样您就可以必须阻止解码数字并继续读取,直到经过的字节数。为客户端和服务器执行此操作,它将使您的代码更简单。