Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Сети > [Windows] AcceptEx() - Ддос; GetLastError - 1450;


Автор: MuForum 3.4.2011, 14:14
Доброго времени суток.
Написал простенькую программу для подключения игроков к серверу.
Задействовал на подключение асинхронную функцию AcceptEx().
Всё работает отлично и очень быстро.
Первый пакет не принимаю. (0 ставлю в длину приёма пакета)
Код

    lpCC->m_sListen            = WSASocket(AF_INET, SOCK_STREAM, IPPROTO_IP, NULL, 0, WSA_FLAG_OVERLAPPED);
    // ----
    if ( lpCC->m_sListen == INVALID_SOCKET )
    {
        g_Log.Add(TColor::Red, "[%s->%s]  %s", "TIOCP", "PrepareAccept", "Error creating accept socket.");
    }
    // ----
    //g_Log.Add(TColor::Red, "[%s->%s] lpCC->m_sListen: %d;", "TIOCP", "PrepareAccept", lpCC->m_sListen);
    // ----
    // # First Associate then AcceptEx();
    // ----
    AssociateSocketWithCompletionPort(lpCC->m_sListen, m_hIOCP, dwListIndex);
    // ----
    iRes    = m_lpfnAcceptEx(m_sListen,
                    lpCC->m_sListen,
                    lpCC->m_pInBuf,
                    0,
                    sizeof(sockaddr_in) + 16,
                    sizeof(sockaddr_in) + 16,
                    & dwBytes,
                    (LPOVERLAPPED) & (lpCC->m_WSARecvOverlapped));


Но вот один человек начал ддосить мою программу.
- Удивило то, что во время ддоса программа начинает загружать систему на 90%, после чего функция GetQueuedCompletionStatus() возвращает false, GetLastError() ошибку 1450;
Цитата

GetLastError() - http://msdn.microsoft.com/en-us/library/ms681385(v=vs.85).aspx;
....
ERROR_NO_SYSTEM_RESOURCES
1450 (0x5AA)
Insufficient system resources exist to complete the requested service.

Поискав в интернете куча тем, но везде решение одно и тоже, увеличить значение переменной реестра http://support.microsoft.com/kb/177078/ru;
- Но хотелось бы не делать временных решений....

# Добавлено: На одном из порталов интернета нашел следующее лечение. (http://leo-sosnine.livejournal.com/114862.html)
Цитата

...
Теория здесь:
http://support.microsoft.com/kb/312362;
http://support.microsoft.com//kb/285089;
...
1. Само собой, запускаем regedit.exe.
2. Идём в HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\Memory Management
3. Создаём запись с именем: PoolUsageMaximum, тип: REG_DWORD, забиваем значение: 60 в десятичной системе исчисления.
4. Создаём запись с именем: PagedPoolSize, тип: REG_DWORD, забиваем значение: 0xFFFFFFFF само собой в шестнадцатиричной системе исчисления.
5. Идём в HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters
6. Создаём запись с именем: IRPStackSize, тип: REG_DWORD, забиваем значение: 50 в десятичной системе исчисления.



P.S. -> Хотелось бы понять принцип ддоса, то есть каким образом ддосят и постараться защититься от этого.

Автор: Олег2005 3.4.2011, 20:00
Посмотрите в гугле
или здесь:
http://www.compdoc.ru/secur/xacer/what_is_ddos_attack/
И у вас скорее всего не ddos - a dos

Автор: MuForum 3.4.2011, 20:17
На сколько я понял, это Syn flood, так как симптомы подходят полностью.

Автор: Олег2005 6.4.2011, 16:20
Да, это оно и есть.....

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)