安全UDP套接字编程

时间:2013-10-30 02:07:50

标签: c++ security udp winsock2 denial-of-service

在UDP客户端/服务器上阻止DoS攻击有哪些良好的编程习惯?目前唯一想到的是忽略具有错误源的数据包(使用WinSock2):

if (oSourceAddr.sa_family == AF_INET) {
    uSourceAddr = inet_addr(oSourceAddr.sa_data);

    if (uSourceAddr == oCorrectDestAddr.sin_addr.S_un.S_addr) {
        queueBuffer.push(std::string(aBuffer));
    }
}

足够快的攻击可能会导致此循环阻塞 - 尤其是在数据包大小较小的情况下。有没有办法可以防止数据包来自某个来源,或者除了正确来源之外的任何来源?我应该注意哪些其他事项?如果解决方案已内置到API中,则代码形式的解释将特别有用。

1 个答案:

答案 0 :(得分:6)

  

有没有办法可以防止数据包从某个来源或任何来源到达正确的来源?

是。只需connect()该正确来源的套接字。然后UDP将过滤掉其他地址的所有数据报。请参阅man 2 connect,关于SOCK_DGRAM套接字的段落。