Безопасное программирование сокетов UDP

Каковы хорошие практики программирования в отношении блокировки DoS-атак на UDP-клиент / сервер? Единственное, что приходит на ум в данный момент, это игнорирование пакетов с неверными источниками, как таковыми (с использованием 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.

3

Решение

Есть ли способ, которым я могу предотвратить поступление пакетов из определенного источника или из любого источника, кроме правильного?

Да. Просто connect() сокет к этому правильному источнику. Затем UDP отфильтрует все дейтаграммы с других адресов. Увидеть человек 2 подключиться, абзац о сокетах SOCK_DGRAM.

6

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]