C++ 安全UDP套接字编程

C++ 安全UDP套接字编程,c++,security,udp,winsock2,denial-of-service,C++,Security,Udp,Winsock2,Denial Of Service,在阻止UDP客户端/服务器上的DoS攻击方面,有哪些良好的编程实践?现在唯一想到的是忽略具有错误源的数据包,例如(使用WinSock2): 足够快的攻击可能会导致循环阻塞,尤其是当数据包大小很小时。有没有一种方法可以防止数据包从某个来源或正确来源之外的任何来源到达?我还应该注意什么?如果解决方案已经内置到API中,那么代码形式的解释将特别有用 有没有一种方法可以防止数据包从某个来源或正确来源之外的任何来源到达 对。只需将套接字连接到正确的源。然后UDP将过滤掉其他地址的所有数据报。请参阅关于SO

在阻止UDP客户端/服务器上的DoS攻击方面,有哪些良好的编程实践?现在唯一想到的是忽略具有错误源的数据包,例如(使用WinSock2):

足够快的攻击可能会导致循环阻塞,尤其是当数据包大小很小时。有没有一种方法可以防止数据包从某个来源或正确来源之外的任何来源到达?我还应该注意什么?如果解决方案已经内置到API中,那么代码形式的解释将特别有用

有没有一种方法可以防止数据包从某个来源或正确来源之外的任何来源到达


对。只需将套接字连接到正确的源。然后UDP将过滤掉其他地址的所有数据报。请参阅关于SOCK_DGRAM sockets的段落。

@downvoter请解释。可能你需要阅读man 2 connect来熟悉BSD sockets API中不太熟悉的方面。我只是想记录在案,我不是投反对票的人,不知道那是谁。反正我以为connect只是TCP?我看过的每一个UDP教程中似乎都没有这个函数,但我会尝试一下。现在已经很晚了,不过,我明天会回来讨论这个问题。根据我收集的信息,bind用于设置运行程序的主机到套接字的地址(即“127.0.0.1”和所选端口),connect用于设置接收数据报的机器?
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));
    }
}