安全的 UDP 套接字编程

Secure UDP Socket Programming

本文关键字:编程 套接字 UDP 安全      更新时间:2023-10-16

关于阻止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 中,则代码形式的说明将特别有用。

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

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