安全UDP套接字编程

Nmd*_*ery 3 c++ security udp denial-of-service winsock2

在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));
    }
}
Run Code Online (Sandbox Code Playgroud)

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

use*_*421 6

有没有办法可以防止数据包来自某个来源,或者除了正确来源之外的任何来源?

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